经典面试题——链表从尾到头打印

本文介绍了一种从尾到头打印单向链表的方法。利用递归特性,不改变链表结构即可实现逆序输出。这种方法巧妙地利用了递归的后进先出特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:输入一个链表的头结点,从尾到头打印链表的每个节点的值。

链表的节点定义如下:

typedef struct ListNode
{
    int data;
    ListNode * pNext;
}ListNode;

看到这里从尾到头打印当然很简单,只需要遍历一遍链表就可以完成。但是是从后往前打印,当然这是单向链表。当然也可以改变指向来解决问题但是会破坏链表的结构,一般不会被允许。
一种思想是我们可以用栈来实现这种顺序,遍历一遍逐渐压栈,最后在从栈里弹出来,就可以实现反转链表。但是要调用stack 里的一些函数。
最后可以用到递归来完成:

void print_list_reverse(ListNode*pHead)
{
    if (NULL != pHead)
    {
        if (pHead->pNext != NULL)
        {
            print_list_reverse(pHead->pNext);//访问下一个节点
        }
        printf("%d\n", pHead->data);
    }
}

递归本来就是一个栈结构,访问本节点的时候首先访问下一个节点,然后递归从最后一个节点输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值