C++ 设计一个算法,从右向左输出一个双向链表中各个结点的值。
时间: 2024-09-27 09:06:41 浏览: 78
C++数据结构与算法之判断一个链表是否为回文结构的方法
在C++中,设计一个从右向左遍历双向链表的算法可以使用迭代的方式实现,因为双向链表允许我们向前和向后移动节点。下面是一个简单的示例:
```cpp
#include <iostream>
// 双向链表节点结构体
struct Node {
int data;
Node* prev; // 指向前一个节点
Node* next; // 指向后一个节点
};
// 初始化一个空的双向链表
Node* createEmptyList() {
return new Node{0, nullptr, nullptr};
}
// 向链表中添加元素
void insert(Node*& head, int value) {
Node* newNode = new Node{value, nullptr, head};
if (head != nullptr) {
head->prev = newNode;
}
head = newNode;
}
// 从右向左遍历并打印链表节点
void printReverse(Node* head) {
if (head == nullptr) {
std::cout << "链表为空\n";
return;
}
Node* current = head;
while (current->next != nullptr) {
current = current->next;
}
// 从当前节点开始,反向打印节点值
while (current != nullptr) {
std::cout << current->data << " ";
current = current->prev;
}
std::cout << "\n"; // 打印最后一个节点(即头节点)
}
int main() {
Node* head = createEmptyList();
// 添加一些节点到链表...
// ...
printReverse(head); // 从右向左打印
delete head; // 清理内存
return 0;
}
```
在这个例子中,`printReverse`函数首先找到链表的尾部(从头部开始向后遍历),然后从尾部开始向前遍历,依次输出每个节点的值。
阅读全文