📅  最后修改于: 2023-12-03 15:27:10.762000             🧑  作者: Mango
这是一个用于在给定大小的组中反转链表的 C++程序。它非常实用,可以用来处理各种链表操作。以下是程序的细节。
该程序使用了迭代的方法来反转链表。它首先将链表分成若干组,每组包含指定数量的节点。然后,程序通过遍历每个组中的节点,反转它们的指针,从而实现反转整个链表的效果。
以下是程序的实现细节:
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *reverseKGroup(ListNode *head, int k) {
if (!head || k < 2){
return head;
}
ListNode *dummy = new ListNode(-1);
dummy->next = head;
ListNode *cur = dummy, *tail = dummy;
while (true){
int count = k;
while (count && tail){
count--;
tail = tail->next;
}
if (!tail){
break;
}
head = cur->next;
while (cur->next != tail){
ListNode *move = cur->next;
cur->next = move->next;
move->next = tail->next;
tail->next = move;
}
cur = head;
tail = head;
}
return dummy->next;
}
};
int main()
{
ListNode *one = new ListNode(1);
ListNode *two = new ListNode(2);
ListNode *three = new ListNode(3);
ListNode *four = new ListNode(4);
ListNode *five = new ListNode(5);
one->next = two;
two->next = three;
three->next = four;
four->next = five;
Solution s;
ListNode *newHead = s.reverseKGroup(one, 2);
while (newHead){
cout << newHead->val << " ";
newHead = newHead->next;
}
cout << endl;
return 0;
}
我们假设链表中的节点值为 1, 2, 3, 4, 5,将其分为大小为 2 的组。使用我们的程序反转每个组,得到反转后的链表为 2, 1, 4, 3, 5。
该程序是非常实用的链表处理工具,在处理链表时可以大大减少程序的开发难度和复杂度。如果您在工作中需要处理链表,那么这个程序一定会给您带来很大的帮助。