static const auto __ = []()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return nullptr;
}();
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
// k <= 1 或 只有一个节点 就直接返回
if (k <= 1)
return head;
if (head == NULL || head->next == NULL)
return head;
// 创建一个头结点
ListNode* p = new ListNode(0);
p->next = head;
ListNode* prv = p;
ListNode* last = prv->next;
ListNode* cur = prv->next;
ListNode* mid = cur->next;
while(prv->next != NULL){
last = prv->next, cur = prv->next, mid = cur->next;
int i;
// 查询剩余节点是否有k个
for (i = 1; i <= k && last != NULL; i++)
last = last->next;
if (i <= k)
return p->next;
// 反转K个节点
ListNode* temp;
while (mid != last) {
temp = mid->next;
mid->next = cur;
cur = mid;
mid = temp;
}
// 将k个节点段接入链表
temp = prv->next;
prv->next = cur;
temp->next = last;
prv = temp;
}
// 返回头结点的下一个节点
return p->next;
}
};
LetCode 25. k个一组翻转链表
最新推荐文章于 2024-03-05 16:07:16 发布