c++swap函数链表
时间: 2024-10-01 15:07:05 浏览: 44
C++中的`swap()`函数通常用于交换两个变量的值,但在处理链表时,它也可以派上用场,特别是在需要临时交换节点数据结构的时候,尤其是对于单向链表。例如,在递归遍历一个双向链表的过程中,如果需要暂时改变节点的前驱和后继关系来进行操作,可以先利用`swap()`函数交换这两个节点的数据。
在链表节点定义里,假设有一个`Node`结构体:
```cpp
struct Node {
int data;
Node* next;
};
```
你可以编写一个自定义版本的`swap()`函数,专门针对链表节点,如下所示:
```cpp
void swap(Node*& a, Node*& b) {
// 检查是否为空或者两者引用是否相等
if (a == nullptr || b == nullptr || a == b)
return;
// 临时存储其中一个节点的next指针
Node* temp = a->next;
// 交换节点的数据
a->data = b->data;
b->data = a->data;
// 交换节点的next指针
a->next = b->next;
b->next = temp; // 或者直接设置成temp,因为已经保存了原始值
}
```
然后在需要的地方,比如处理两个相邻节点时,可以这样做:
```cpp
Node* current = head;
while (current && current->next) {
Node* next = current->next;
swap(current, next);
// 其他操作...
current = next;
}
```
阅读全文