LeetCode "Reverse Nodes in k-Group"

Another list manipulation problem.

class Solution {
public:
    ListNode *reverseKGroup(ListNode *head, int k) {
        if (!head) return head;
        if (!head->next) return head;
        if (k == 1) return head;

        ListNode dum(-1); dum.next = head;
        ListNode *pProb = &dum;
        while (pProb)
        {
            //    Prob    
            ListNode *pPre = pProb;
            int cnt = k;
            while(cnt-- && pProb)    pProb = pProb->next;
            //    Valid? (= k)
            if(pProb)
            {
                ListNode *pEnd = pProb->next;
                
                ListNode *pToConn = pPre;
                ListNode *pOrig = pPre->next;
                for(int i = k; i >= 1; i --)
                {
                    ListNode *p = pToConn;
                    int cnt0 = i;
                    while(cnt0--) p = p->next;
                    pToConn->next = p;
                    pToConn = p;
                    p->next = pOrig;
                }
                pProb = pToConn;
                pToConn->next = pEnd;
            }            
        }
        return dum.next;
    }
};
原文地址:https://www.cnblogs.com/tonix/p/3893605.html