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
.
思路:
这道题的要求不用多说,看上述的例子就能看懂。说几个需要注意的地方:
1.题目里没有说k的范围,如果k大于了链表长度,需要k对链表长度取余。
2.如果链表长度为1,就是只有一个节点的情况下,不论k取值是什么,链表都不会发生变化。
3.这道题还是得先根据k定位,快慢指针法应该已经轻车熟路了,定好位之后,修改节点的指向就简单了。
4.链表题,多画图,思路真的能清晰很多。
public class RotateList {
public ListNode rotateRight(ListNode head, int k) {
if(head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode slow = dummy;
ListNode fast = dummy;
int len = 0;
while(fast.next != null) {
len++;
fast = fast.next;
}
for(int i=len-k%len; i>0; i--) {
slow = slow.next;
}
fast.next = dummy.next;
dummy.next = slow.next;
slow.next = null;
return dummy.next;
}
}