LeetCode 25.K个一组反转链表
思路:p0设为上一组反转链表的最后一个结点,设置dummy节点作为哨兵,一步一步局部反转完组内链表后,再完善组之间的反转关系。
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* cur = head, *pre = NULL, *next, *p0 = dummy;
int n = 0;
while(cur) {
n++;
cur = cur->next;
}
cur = head;
while(n >= k) {
n -= k;
for(int i = 0; i < k; i++) {
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
next = p0->next;
p0->next->next = cur;
p0->next = pre;
p0 = next;
}
return dummy->next;
}
};