LeetCode Q 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
Solution
Code:
public ListNode rotateRight(ListNode head, int k) {
if (head == null || head.next == null || k == 0)
return head;
int len = 1;
ListNode tail = head;
while (tail.next != null) {
len++; tail = tail.next;
}
if (k % len == 0) return head;
k %= len;
ListNode dummy = new ListNode(-1); dummy.next = head;
ListNode curr = head;
for (int i = 1; i < len - k; i++) {
curr = curr.next;
}
tail.next = dummy.next;
dummy.next = curr.next;
curr.next = null;
return dummy.next;
}