双链表的逆序输出
时间: 2023-09-13 16:12:36 浏览: 57
可以使用双指针来实现双链表的逆序输出。具体实现步骤如下:
1. 定义两个指针:p1 和 p2,分别指向链表的头结点和尾节点。
2. 交换 p1 和 p2 的值。
3. 将 p1 指向下一个节点。
4. 如果 p1 不等于 p2,则重复步骤 2~3。
5. 输出 p2 的值。
具体代码实现如下:
```
void reverse_print(Node *head) {
if (head == NULL) {
return;
}
Node *p1 = head;
Node *p2 = head->prev; // 注意这里是指向尾节点
while (p1 != p2) {
std::swap(p1->data, p2->data);
p1 = p1->next;
if (p1 == p2) { // 针对链表节点数为偶数的情况
break;
}
p2 = p2->prev;
}
std::cout << p2->data << std::endl;
}
```
这样就可以实现双链表的逆序输出了。
相关问题
c语言双向链表逆序输出问题
要将双向链表进行逆序输出,可以考虑使用双指针法。具体实现步骤如下:
1. 定义两个指针,分别指向链表的头部和尾部。
2. 使用循环遍历链表,交换头尾指针所指向的节点的值,并将头指针向后移动一位,尾指针向前移动一位。
3. 循环遍历直到头指针超过尾指针。
以下是 C 语言实现的代码示例:
```
void reverse_print(struct Node* head) {
struct Node *front = head;
struct Node *back = head;
while (back->next != NULL) {
back = back->next;
}
while (front != back && front->prev != back) {
// 交换前后指针所指向的节点的值
int temp = front->data;
front->data = back->data;
back->data = temp;
front = front->next;
back = back->prev;
}
// 输出链表节点的值
struct Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
```
此代码实现了将双向链表进行逆序输出的功能。注意,在输出链表节点值的时候,可以直接从头部开始遍历输出即可。
双向链表逆序遍历java
双向链表逆序遍历可以利用链表的prev指针,从链表的尾部开始遍历,直到遍历到链表的头部。下面是Java代码实现:
```
public void reverseDisplay() {
ListNode cur = this.last;
while(cur != null) {
System.out.print(cur.val + " ");
cur = cur.prev;
}
}
```
该方法中,我们从链表的尾部开始遍历,每次输出当前节点的值,并将当前节点指向前一个节点,直到遍历到链表的头部为止。