leetcode 61旋轉連結串列
阿新 • • 發佈:2021-08-29
給你一個連結串列的頭節點 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; }