#include <iostream>
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode(int v, ListNode* n):val(v), next(n){}
};
ListNode* reverse(ListNode* head) {
if (head == nullptr) {
return head;
}
ListNode pre(-1, head);
ListNode* cur = head;
while (cur->next != nullptr) {
auto tmp = cur->next;
cur->next = tmp->next;
tmp->next = pre.next;
pre.next = tmp;
}
return pre.next;
}
ListNode* reversek(ListNode* head, int k) {
ListNode pre(-1, head);
ListNode* first = head;
ListNode* second = head;
ListNode* third = ⪯
int idx = 1;
while (first != nullptr) {
idx = 1;
while (first != nullptr && idx < k) {
first = first->next;
idx++;
}
if (first == nullptr) {
break;
}
auto tmp = first->next;
first->next = nullptr;
third->next = reverse(second);
second = tmp;
first = second;
while (third->next != nullptr) {
third = third->next;
}
}
third->next = second;
return pre.next;
}
int main() {
ListNode* n7 = new ListNode(7, nullptr);
ListNode* n6 = new ListNode(6, n7);
ListNode* n5 = new ListNode(5, n6);
ListNode* n4 = new ListNode(4, n5);
ListNode* n3 = new ListNode(3, n4);
ListNode* n2 = new ListNode(2, n3);
ListNode* n1 = new ListNode(1, n2);
ListNode* n0 = new ListNode(0, n1);
ListNode* head = n0;
int k = 3;
auto res = reversek(head, k);
while (res != nullptr) {
cout << res->val << " ";
res = res->next;
}
cout << endl;
}
反转局部链表
于 2025-07-29 20:38:09 首次发布
452

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



