📅  最后修改于: 2023-12-03 15:40:53.875000             🧑  作者: Mango
本程序使用C++语言实现,旨在提供一种方法来就地重新排列给定链接列表。
本程序使用链表来存储元素,并通过交换节点的位置来实现就地重新排列。
具体实现过程如下:
Node
,包含value
和next
成员变量,分别表示节点的值和下一个节点的指针。LinkedList
,包含head
和tail
成员变量,分别表示链表头部和尾部节点的指针。LinkedList
类的reverse
函数,用于对链表进行就地重新排列。reverse
函数中,使用三个指针prev
、curr
和next
来遍历链表,并通过交换指针的指向来实现就地重新排列。struct Node{
int value;
Node* next;
};
class LinkedList{
public:
Node* head;
Node* tail;
// 构造函数,初始化链表
LinkedList(){
head = nullptr;
tail = nullptr;
}
// 就地重新排列链表
void reverse(){
Node* prev = nullptr;
Node* curr = head;
Node* next = nullptr;
while(curr != nullptr){
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
// 添加元素到链表末尾
void add(int val){
Node* newNode = new Node;
newNode->value = val;
newNode->next = nullptr;
if(head == nullptr){
head = newNode;
tail = newNode;
}else{
tail->next = newNode;
tail = newNode;
}
}
// 输出链表内容
void print(){
Node* curr = head;
while(curr != nullptr){
std::cout << curr->value << " ";
curr = curr->next;
}
std::cout << std::endl;
}
};
int main(){
LinkedList list;
// 添加测试数据
list.add(1);
list.add(2);
list.add(3);
list.add(4);
std::cout << "原始链表:";
list.print();
// 对链表进行就地重新排列
list.reverse();
std::cout << "重新排列后的链表:";
list.print();
return 0;
}
本程序实现了一种使用链表来就地重新排列的方法,将链表中的每个节点的next
指针反转即可。通过使用链表,我们可以高效地对任意长度的列表进行重新排列。