写出双向链表倒置的算法 C++
时间: 2024-09-11 15:02:27 浏览: 42
双向链表的倒置算法涉及到遍历链表并交换其节点的前后指针。以下是一个C++的示例实现:
```cpp
struct Node {
int data;
Node* prev;
Node* next;
Node(int data) : data(data), prev(nullptr), next(nullptr) {}
};
void reverseList(Node*& head) {
Node* temp = nullptr;
Node* current = head;
// 遍历链表,逐个节点进行指针的交换
while (current != nullptr) {
temp = current->prev;
current->prev = current->next;
current->next = temp;
current = current->prev;
}
// 如果原链表非空,更新头指针到新头部
if (temp != nullptr) {
head = temp->prev;
}
}
```
这段代码首先定义了一个双向链表节点的结构体`Node`,其中包含数据域`data`以及指向前一个节点的`prev`指针和指向后一个节点的`next`指针。`reverseList`函数接受一个指向头节点的引用`head`,并且通过一系列指针交换操作来反转链表。在这个过程中,`temp`指针用来暂存数据,以便在交换指针时不会丢失信息。
需要注意的是,反转双向链表不需要额外的内存空间来存储元素,只需要修改节点之间的指针关系即可。在函数结束时,原链表的最后一个节点将成为新链表的头节点。
阅读全文