1. 程式人生 > >rotate-list 旋轉部分鏈表

rotate-list 旋轉部分鏈表

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.

題目;給定一個鏈表,將鏈表旋轉到右邊的k個位置,其中k是非負的。 例如: 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, int
k) { 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 旋轉部分鏈表