Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4 Output:2->0->1->NULL
Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right:0->1->2->NULL
rotate 4 steps to the right:2->0->1->NULL
真的没啥好讲的
数明白数就好了
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
int n=0;
ListNode* p=head;
while(p!=NULL){
n++;
p=p->next;
}
if(n==0)
return head;
k=k%n;
k=n-k;
if(k==n)
return head;
ListNode *k1=head,*k2=head,*k3=head;
for(int i=0;i<n-1;i++){
if(i<k-1)
k1=k1->next;
if(i<k)
k3=k3->next;
k2=k2->next;
}
k2->next=head;
k1->next=NULL;
return k3;
}
};