25. Reverse Nodes in k-Group

来源:互联网 发布:数据输入 编辑:程序博客网 时间:2024/05/18 00:57
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    typedef pair<ListNode*,ListNode*> ListNodePair;    ListNode* reverseKGroup(ListNode* head, int k) {        if(head == NULL || k == 1) {            return head;        }        ListNode *newHead,*Tail;        newHead = Tail = NULL;        while(head != NULL) {            int num = 0;            ListNode *tempHead = head,*tempTail = NULL;            while(head != NULL && num < k) {                num++;                tempTail = head;                head     = head->next;            }            tempTail->next = NULL;            if(num == k) {                ListNodePair pairList = reverseList(tempHead);                if(newHead == NULL) {                    newHead = pairList.first;                    Tail    = pairList.second;                } else {                    Tail->next = pairList.first;                    Tail       = pairList.second;                }            }            else {                if(newHead == NULL) {                    newHead = tempHead;                } else {                    Tail->next = tempHead;                }            }        }        return newHead;    }    ListNodePair reverseList(ListNode *head) {        ListNode *theNext,*underNext,*Tail;        theNext     = head->next;        Tail        = head;        while(theNext != NULL) {            underNext       = theNext->next;            theNext->next   = head;            Tail->next      = underNext;            head            = theNext;            theNext         = underNext;        }        return make_pair(head,Tail);    }};

0 0
原创粉丝点击