设计一个算法,从右向左输出一个双向链表中各个结点的值。使用C++
时间: 2024-09-29 11:08:09 浏览: 55
设计一个C++算法从右向左遍历双向链表,我们需要定义一个结构体表示链表节点,并实现一个迭代的方式。首先,我们创建`DoublyListNode`结构体:
```cpp
#include <iostream>
// 定义双向链表节点结构
struct DoublyListNode {
int value;
DoublyListNode* prev;
DoublyListNode* next;
DoublyListNode(int val = 0) : value(val), prev(nullptr), next(nullptr) {}
};
```
接下来,我们可以编写一个函数`reversePrintList`来遍历并打印链表:
```cpp
void reversePrintList(DoublyListNode* head) {
if (head == nullptr || head->next == nullptr) { // 如果链表为空或只有一个节点
std::cout << head->value << '\n';
return;
}
// 使用两个指针,一个指向当前节点,一个指向前一个节点
DoublyListNode* current = head;
DoublyListNode* previous = nullptr;
// 反向遍历直到头节点
while (current != nullptr) {
// 打印当前节点值
std::cout << current->value << ' ';
// 更新指针准备下一次迭代
previous = current;
current = current->prev;
}
// 最后一个节点的值已经打印过了,这里不需要再打印一遍
std::cout << '\n'; // 结束换行
}
```
现在你可以使用这个函数来打印一个双向链表的值,例如:
```cpp
int main() {
// 创建一个双向链表示例...
DoublyListNode* list = createLinkedList(); // 假设createLinkedList是你自己定义的构造链表的函数
// 调用函数从右向左打印
reversePrintList(list);
deleteList(list); // 清理内存
return 0;
}
```
阅读全文