Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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;
    }
};
posted on 2014-08-06 04:46  Tonix  阅读(157)  评论(0)    收藏  举报