/**
* 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
最新推荐文章于 2020-07-05 15:42:20 发布
本文介绍了一种链表操作算法——K组翻转。该算法实现了一个功能,即每K个一组翻转链表,并提供了完整的C++代码实现及解析。通过递归方式处理链表节点,实现了链表的有效翻转。
446

被折叠的 条评论
为什么被折叠?



