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>size的情况,即倒数的k%size个。
代码:
class Solution { public: int getLen(ListNode* head){ int res=0; ListNode* p=head; while(p!=NULL){ ++res; p=p->next; } return res; } ListNode *rotateRight(ListNode *head, int k) { if(head==NULL||k==0) return head; int size=getLen(head); if(k>size) k=k%size; if(k==size||k==0) return head; int i=size-k; int j=1; ListNode* p=head; while(j<i){ p=p->next; ++j; } ListNode* q=p->next; ListNode* resHead=q; p->next=NULL; while(q->next!=NULL){ q=q->next; } q->next=head; return resHead; } };