1. 程式人生 > 其它 >leetcode 61旋轉連結串列

leetcode 61旋轉連結串列

給你一個連結串列的頭節點 head ,旋轉連結串列,將連結串列每個節點向右移動 k 個位置。

示例 1:

輸入:head = [1,2,3,4,5], k = 2
輸出:[4,5,1,2,3]

輸入:head = [0,1,2], k = 4
輸出:[2,0,1]
提示:

連結串列中節點的數目在範圍 [0, 500] 內
-100 <= Node.val <= 100
0 <= k <= 2 * 109

這個題目有個錯誤的解法:就是利用快慢指標將要倒數k個數值擷取放到前面,但是k有可能大於總元素的長度

正確的解法是將連結串列變成環形連結串列然後,然後計算最後的數值在連結串列中的位置,k%連結串列長度為一個連結串列中需要移動的次數,所以要從連結串列尾部k%連結串列長長度值處將環形連結串列切開。

 public ListNode rotateRight(ListNode head, int k) {
        if(head==null)
            return head;
        ListNode cur=head;
        int count=1;
        while (cur.next!=null)
        {
            cur=cur.next;
            count++;
        }
        cur.next=head;
        int n=count-k%count;
        cur=head;
        for(int i=0;i<n-1;i++)
        {
            cur=cur.next;
        }
        head=cur.next;
        cur.next=null;
        return head;

    }