leetcode61Rotate List【將列表後k個元素移動到前面】
阿新 • • 發佈:2018-12-18
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; } };