Given a list, rotate the list to the right by
One thing need to notice is that the k might be larger than the size of the linked list. Then we need to mod k with the size.
k
places, where
k
is non-negative.
Example
Given 1->2->3->4->5
and k = 2
, return 4->5->1->2->3
.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: the List
* @param k: rotate to the right k places
* @return: the list after rotation
*/
public ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null) {
return head;
}
int size = 0;
ListNode dummy = new ListNode(0);
dummy.next = head;
while(head != null) {
size ++;
head = head.next;
}
size = k % size;//k might be larger than the size
head = dummy.next;
ListNode end = head;
for(int i = 0; i < size; i++) {
end = end.next;
}
while(end.next != null) {
head = head.next;
end = end.next;
}
end.next = dummy.next;
dummy.next = head.next;
head.next = null;
return dummy.next;
}
}
One thing need to notice is that the k might be larger than the size of the linked list. Then we need to mod k with the size.
Find the nth + 1 node from the end and break the linked list into two lists.