【ATT】Reverse Nodes in k-Group

 

    ListNode* reverseBetween(ListNode* prev,ListNode* next)//reverse prev->next, last->prev之间的链表
    {
        ListNode* last = prev->next;
        ListNode* cur = last->next;
        while(cur!=next)
        {
            last->next = cur->next;
            cur->next = prev->next;
            prev->next = cur;
            cur = last->next;
        }
        return last;
    }
    ListNode *reverseKGroup(ListNode *head, int k) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(!head||k<=1) return head;
        
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        
        ListNode* cur = head;
        ListNode* prev = dummy;
        
        int i = 0;
        
        while(cur)
        {
            ++i;
            if(i%k==0)
            {
                prev = reverseBetween(prev,cur->next);  //reverse一个区间
                cur = prev->next; //注意这里不是cur = cur->next;
            }else
                cur = cur->next;
        }
        
        ListNode* newHead = dummy->next;
        delete dummy;
        return newHead;
    }

  

posted @ 2013-10-26 21:18  summer_zhou  阅读(159)  评论(0)    收藏  举报