Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
Idea: dummy node
1.find length of linkedlist of tail node
2.local the cutting position node by n=len-n%len(handle case n >len)
3. use dummy node to rotate right
public class Solution {
public ListNode rotateRight(ListNode head, int n) {
if(head==null || head.next==null) return head;
ListNode tail=head;
int len=1;
//tail => last element not => null
while(tail.next!=null){
tail=tail.next;
len++;
}
//check for special case
if(n==len){
return head;
}
n=len-n%len;
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode tempDummy=dummy;
//local the cutting node
for(int i=0;i<n;i++){
tempDummy=tempDummy.next;
}
//rotate right
tail.next=dummy.next;
dummy.next=tempDummy.next;
tempDummy.next=null;
return dummy.next;
}
}