rotate-list 旋轉部分鏈表
阿新 • • 發佈:2018-09-13
div lan spa ext col ace 其中 給定 efi
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given1->2->3->4->5->NULLand k =2,
return4->5->1->2->3->NULL.
例如:
1->2->3->4->5->NULL,為K = 2,
返還4->5->1->2->3->NULL。
分析:先遍歷一遍,得出鏈表長度len,註意k可能會大於len,因此k%=len。
將尾結點next指針指向首節點,形成一個環,接著往後跑len-k步,從這裏斷開,就是結果
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *rotateRight(ListNode *head, intk) { if(head==nullptr||k==0) return head; int len=1; ListNode *p=head; while(p->next){ //遍歷一遍,求出鏈表長度 len++; p=p->next; } k=len-k%len; p->next=head;//首尾相連 for(int step=0;step<k;step++){ p=p->next;//接著往後跑 } head=p->next;//新的首節點 p->next=nullptr;//斷開環 return head; } };
rotate-list 旋轉部分鏈表