原题链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/
ListNode* reverseList(ListNode* head,ListNode* tail) {
ListNode *cur = NULL,*pre = head;
while(pre != tail){
ListNode *tmp = pre->next;
pre->next = cur;
cur = pre;
pre = tmp;
}
return cur;
}
ListNode* reverseKGroup(ListNode* head,int k){
ListNode *p = head,*q = head,*pre = NULL;//p是上一组第一个节点,pre指向上一组最后一个节点,q是下一组第一个节点
int cnt = 0;
while(q){
cnt++;
q = q->next;
if(cnt == k){
ListNode *rhead = reverseList(p,q);//反转之后,p是上一组最后一个节点,q还是下一组第一个节点
if(p == head){
head = rhead;//如果是第一组,则将head指向rhead
} else {
pre->next = rhead;//此时pre指向的是上上一组的最后一个节点,将上上一组的最后一个节点指向反转数组的头节点
}
pre = p;//pre指向上一组最后一个节点
p = q;//p指向下一组第一个节点
cnt = 0;//重新计数
}
}
if(pre) pre->next = p;//将剩余部分连接起来
return head;
}