题目:
解答:
这道题其实就是链表翻转的一个循环。
代码:
/**
* 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) {
if(head == NULL) return NULL;
ListNode* t = new ListNode(-1);
t->next = head;
ListNode* p = t;
while(true){
bool hasReachEnd = false;
ListNode* tmp = p;
int cnt = k;
while(--cnt && tmp->next != NULL) tmp = tmp->next;
if(tmp->next == NULL) break;
ListNode* tail = p->next, *begin = p->next, *second = begin->next;
for(int i = 0;i < k - 1;++i){
tmp = second->next;
second->next = begin;
begin = second;
second = tmp;
}
p->next = begin;
tail->next = second;
p = tail;
}
head = t->next;
delete(t);t = NULL;
return head;
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)