1. 程式人生 > >LeetCode-61. 旋轉連結串列

LeetCode-61. 旋轉連結串列

題目

給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動 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

解題

  • 說是旋轉, 其實就是將連結串列分割成兩部分, 然後重新組合起來即可
  • 使用雙索引, 程式碼如下:
class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || head.next == null){
            return head;
        }

        ListNode cur = head;
        int length = 0;
        while (cur != null)
{ cur = cur.next; length ++; } k = k % length; if(k == 0) { return head; } ListNode first = head; ListNode second = head; for (int i = 0; i < k; i++) { first = first.next; } while
(first != null){ if (first.next == null){ break; } first = first.next; second = second.next; } ListNode newHead = second.next; second.next = null; first.next = head; return newHead; } }