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


思路:

首先将链表变为循环链表。之后记录下链表的头结点head。一直往下走在链表长度减去head走过的步数为给定的数k的时候停下。此时head的下一个结点就是咱们要找的头结点。

注意:
如果给定的数k大于链表的长度length的时候需要用k%length


代码:

public ListNode rotateRight(ListNode head, int k) {
        if(head == null){
            return null;
        }
        if(head.next == null){
            return head;
        }
        ListNode previous = head;
        ListNode next = head.next;
        ListNode node = head;
        int length = 1;
        while(node.next != null){
            length++;
            node = node.next;
        }
        int newk = k%length;
        int count = 1;
        while(length - count != newk){
            previous = previous.next;
            count++;
        }
        node.next = head;
        head = previous.next;
        previous.next = null;
        return head;
}

你可能感兴趣的:(Leetcode 61 - Rotate List)