LeetCode 61.Rotate List (旋轉連結串列)
阿新 • • 發佈:2018-12-12
題目描述:
給定一個連結串列,旋轉連結串列,將連結串列每個節點向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: 1->2->3->4->5->NULL, k = 2 輸出: 4->5->1->2->3->NULL 解釋: 向右旋轉 1 步: 5->1->2->3->4->NULL 向右旋轉 2 步: 4->5->1->2->3->NULL
示例 2:
輸入: 0->1->2->NULL, k = 4 輸出:2->0->1->NULL
解釋: 向右旋轉 1 步: 2->0->1->NULL 向右旋轉 2 步: 1->2->0->NULL 向右旋轉 3 步:0->1->2->NULL
向右旋轉 4 步:2->0->1->NULL
AC C++ Solution:
/** * 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) return head; int len = 1; //number of nodes ListNode *newH, *tail; newH = tail = head; while(tail->next) //get the number of nodes in the list { tail = tail->next; len++; } tail->next = head; //circle the link if(k %= len) { for(auto i = 0; i < len-k; i++) tail=tail->next; //the tail node is the (len-k)-th node } newH = tail->next; tail->next = NULL; return newH; } };