LeetCode | Reverse Nodes in k-Group

https://leetcode.com/problems/reverse-nodes-in-k-group/

依次抽出k个,划分出链表的一段,reverse这段,再拼接回去。

class Solution {
public:
    ListNode *reverseKGroup(ListNode *head, int k) {
        if (!head) return head;
        
        ListNode dummy(0); dummy.next = head;
        ListNode *prev = &dummy;
        while (true) {
            int i = 1;
            ListNode *p = head;
            while (p && i < k) { p = p->next; i++; }
            if (!p) return dummy.next;
            ListNode *next = p->next;
            p->next = NULL;
            ListNode *new_head = reverse_list(head);
            prev->next = new_head; head->next = next; 
            prev = head; head = next;
        }
    }
    
    ListNode *reverse_list(ListNode *head) {
        ListNode *pre = NULL, *next;
        while (head) {
            next = head->next;
            head->next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
};
原文地址:https://www.cnblogs.com/ilovezyg/p/6376126.html