Leetcode 61 Rotate List

    科技2024-10-02  22

    Leetcode 61 Rotate List

    题目思路代码

    题目

    Given a linked list, rotate the list to the right by k places, where k is non-negative.

    Example 1: Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL

    Example 2: Input: 0->1->2->NULL, k = 4 Output: 2->0->1->NULL Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right: 0->1->2->NULL rotate 4 steps to the right: 2->0->1->NULL

    思路

    其实就是需要修改第len-k个数的next为null,和最后一个节点的next为head。考虑先遍历一遍计算出list的总长度,同时可以根据停止条件找个最后一个节点last。对k取模,然后将指针curr挪到正确的位置(下一个节点为新的头),更改curr和last的next指针。

    代码

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode rotateRight(ListNode head, int k) { if (head == null) return head; int len = 0; ListNode curr = head, last = head;; while (curr != null) { last = curr; curr = curr.next; len++; } k = k % len; if (k == 0) return head; curr = head; for (int i = 1; i < len - k; i++) { curr = curr.next; } ListNode newHead = curr.next; curr.next = null; last.next = head; return newHead; } }
    Processed: 0.009, SQL: 8