LeetCode——25.K 个一组翻转链表(困难)
Posted nirvana · rebirth
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode——25.K 个一组翻转链表(困难)相关的知识,希望对你有一定的参考价值。
题解
- 搞个头节点,直接每k个翻转即可
AC-Code
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
pair<ListNode*, ListNode*> reverseG(ListNode* head, ListNode* tail) {
ListNode* pre = tail->next; // 翻转之后末尾连接完成,只有头部没有连接
ListNode* p = head;
while(pre != tail) {
ListNode* nex = p->next;
p->next = pre;
pre = p;
p = nex;
}
return {tail, head};
}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* hair = new ListNode(0, head);
ListNode* pre = hair;
while(head) {
ListNode* tail = head;
for(int i = 0; i < k - 1 ; ++i) {
tail = tail->next;
if(!tail) {
return hair->next;
}
}
// ListNode* nex = tail->next;
tie(head, tail) = reverseG(head, tail);
pre->next = head;
// tail->next = nex; // reverseG已经连接了尾部
pre = tail;
head = tail->next;
}
{
ListNode* ans = hair->next;
delete hair; // hair是new出来的,理应释放
}
return ans;
}
};
以上是关于LeetCode——25.K 个一组翻转链表(困难)的主要内容,如果未能解决你的问题,请参考以下文章
leetcode25. K 个一组翻转链表---python
leetcode25. K 个一组翻转链表---python
leetcode25. K 个一组翻转链表---python