作者:disappearedgod
时间:2014-4-22
题目
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
.
Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
解法
思想:成循环节点,到循环位置解开
public ListNode rotateRight(ListNode head, int n) {
if(head==null)
return head;
ListNode loop = head;
ListNode end = head;
ListNode front = head;
while(loop.next!=null)
loop = loop.next;
loop.next=head;
end = loop;
loop = head;
for(int i = 0; i < n;i++){
loop = loop.next;
}
while(loop != end){
loop = loop.next;
front = front.next;
}
ListNode ret = front.next;
front.next = null;
return ret;
}