天天看點

連結清單-Java-力扣61. 旋轉連結清單1. 題目2. 思路3. 代碼

1. 題目

題目連結61. 旋轉連結清單

2. 思路

意思就是将最後的k個節點放到連結清單前面即可,如果k大于連結清單長度,取餘數即可:

3. 代碼

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || head.next == null) return head;
        // 先找到連結清單的長度
        int len = 1;
        ListNode curr = head;
        ListNode prev = head;
        while (curr.next != null) {
            len++;
            curr = curr.next;
            // 保證prev在連結清單的最後一個節點上
            prev = curr;
        }
        // 把k映射到連結清單長度以内,因為k可能大于長度
        k = k % len;
        ListNode dummyNode = new ListNode(0);
        dummyNode.next = head;
        curr = head;
        // 把curr放到len - k的位置上
        len = len - k;
        while (len > 1) {
            curr = curr.next;
            len--;
        }
        // 把尾巴上的k個元素放到連結清單頭部
        prev.next = dummyNode.next;
        dummyNode.next = curr.next;
        curr.next = null;

        return dummyNode.next;
    }
}