设计一个从右往左打印双向链表
时间: 2024-09-22 15:04:18 浏览: 9
设计一个从右往左打印双向链表的问题,通常我们需要遍历链表,并考虑到双向链表的特点,即每个节点除了指向下一个节点外,还有一个指向前一个节点的引用。为了从右到左打印,我们可以在常规的遍历基础上稍微调整一下:
首先,定义链表节点结构体,包含数据域、指向下个节点的引用(next)以及指向前一个节点的引用(prev)。
```c++
struct Node {
int data;
Node* next;
Node* prev;
};
```
然后,创建一个辅助函数用于反转链表,这个函数会改变当前节点的prev和next指针:
```c++
void reverse(Node** head) {
if (*head == nullptr || (*head)->next == nullptr) return; // 如果链表为空或只有一个节点,无需反转
Node* current = *head;
Node* temp = nullptr;
while (current != nullptr) {
temp = current->prev; // 临时存储当前节点的prev指针
current->prev = current->next; // 更新当前节点的prev指向下一个节点
current->next = temp; // 更新当前节点的next指向原来的prev
if (temp != nullptr) temp->next = nullptr; // 如果有前驱节点,更新其next为nullptr
current = current->prev; // 移动到下一个节点
}
if (temp != nullptr) *head = temp->prev; // 最后把新的头节点设置为原头节点的prev
}
```
接下来,创建一个函数printRightToLeft()来进行从右向左的打印:
```c++
void printRightToLeft(Node* head) {
reverse(&head); // 反转链表
while (head != nullptr) {
cout << head->data << " ";
head = head->prev;
}
cout << endl;
}
```
现在你可以通过调用`printRightToLeft(head)`来打印出双向链表从右到左的内容,其中`head`是链表的头节点。