61 Rotate List
链接:https://leetcode.com/problems/rotate-list/
问题描述:
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.
Hide Tags Linked List Two Pointers
这个问题是把链表末端元素移动到链表首位,移动k次。当k大于链表元素数目length时可以做些化简,k%=length,因为每移length次,链表就回复原样了。k做好优化后只要末尾k个元素放到链表前面就可以了。
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head==NULL||head->next==NULL)
return head;
ListNode*t=head,*pre,*result;
int length=0;
while (t)
{
length++;
t=t->next;
}
k%=length;
if(0==k)
return head;
t=head;
length=length-k;
while(length--)
{
pre=t;
t=t->next;
}
result=t;
while(t->next)t=t->next;
t->next=head;
pre->next=NULL;
return result;
}
};