/**
* 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);
}
};
25. Reverse Nodes in k-Group
最新推荐文章于 2024-01-12 14:58:21 发布