#include <iostream>
#include <set>
#include <thread>
#include <mutex>
#include <deque>
using namespace std;
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) {}
};
// 翻转链表
ListNode* Reverse(ListNode* head) {
ListNode pre(0, 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;
}
// k个一组翻转链表,不足k个时不进行翻转,要求复用Reverse函数
// input: head = {1, 2, 3, 4, 5}, k = 2
// output: {2, 1, 4, 3, 5}
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode pre(0, head);
ListNode* first = head;
ListNode* second = head;
ListNode* third = ⪯
int num = k;
while (first != nullptr) {
num = k;
while (num > 1 && first != nullptr) {
first = first->next;
num--;
}
if (first == nullptr) {
third->next = second;
} else {
auto tmp_head = second;
second = first->next;
first->next = nullptr;
third->next = Reverse(tmp_head);
num = k;
while (num > 0) {
third = third->next;
num--;
}
first = second;
}
}
return pre.next;
}
int main() {
ListNode* head = new ListNode(1);
ListNode* cur = head;
for (int i = 2; i <= 5; ++i) {
cur->next = new ListNode(i);
cur = cur->next;
}
ListNode* res = reverseKGroup(head, 2);
// ListNode* res = Reverse(head);
while (res) {
std::cout << res->val << " ";
res = res->next;
}
std::cout << std::endl;
return 0;
}
字符串反转
C++实现字符串反转
最新推荐文章于 2025-11-27 15:16:14 发布
1236

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



