一、问题描述
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
.
二、问题分析
从给的例子中很明显理解题意,倒数第k个元素成为新的头,然后把旧的头链接到尾上。这时应该条件反射的考虑到双指针方法。当然这道题也可以换个思路,可以先找到倒数第K个元素,然后把链表构成个环,最后断开第K个元素前一个即可。这道题还需要注意的就是k可能大于整个链表的长度,那么需要求总长然后取余数即可。
三、Java AC 代码
public ListNode rotateRight(ListNode head, int k) {
if (head==null || head.next==null || k==0) {
return head;
}
ListNode p = head;
int length = 1;
while(p.next!=null){
length++;
p = p.next;
}
k %= length;
if(k==0) return head;
p.next = head;
for(int i=0;i<length-k;i++){
p = p.next;
}
head = p.next;
p.next = null;
return head;
}