leetcode-61 旋轉連結串列
阿新 • • 發佈:2018-11-30
給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: 1->2->3->4->5->NULL, k = 2 輸出: 4->5->1->2->3->NULL 解釋: 向右旋轉 1 步: 5->1->2->3->4->NULL 向右旋轉 2 步: 4->5->1->2->3->NULL
示例 2:
輸入: 0->1->2->NULL, k = 4 輸出:2->0->1->NULL
解釋: 向右旋轉 1 步: 2->0->1->NULL 向右旋轉 2 步: 1->2->0->NULL 向右旋轉 3 步: 0->1->2->NULL 向右旋轉 4 步: 2->0->1->NULL
原理是先遍歷整個連結串列獲得連結串列長度n,然後此時把連結串列頭和尾連結起來,在往後走n - k % n個節點就到達新連結串列的頭結點前一個點,這時斷開連結串列即可。
public ListNode rotateRight(ListNode head, int k) { if(head == null) return null; int n = 1; ListNode cur = head; while(cur.next != null){//統計連結串列的長度,到達連結串列的末尾 n++; cur = cur.next; } cur.next = head;//將連結串列頭與尾相連 int m = n - k % n; for(int i = 0; i < m; i++){//往後走m步 cur = cur.next; } ListNode newHead = cur.next; cur.next = null;//斷開連結串列 return newHead; }