Leetcode(25) K個一組翻轉連結串列
阿新 • • 發佈:2018-12-11
題目描述
給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。
k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。
示例 :
給定這個連結串列:1->2->3->4->5
當 k = 2 時,應當返回: 2->1->4->3->5
當 k = 3 時,應當返回: 3->2->1->4->5
解題思路
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { ListNode *L = head; ListNode *res = new ListNode(0); ListNode *pre = res; res->next = head; while(L) { int n = k; ListNode *inside = L; // 檢查是否可以翻轉 while(n && inside) { inside = inside->next; n--; } if(n == 0) { //說明符合k哪麼反轉就OK了 n = k; ListNode *p1 = inside; ListNode *p2 = L; ListNode *p3 = p2; while(n) { p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; n --; } pre->next = p1; pre = L; } L = inside; } return res->next; } };