您的位置:首页 > 职场人生

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

2017-04-04 22:50 344 查看

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

链表的节点定义如下:

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);
}
}


递归本来就是一个栈结构,访问本节点的时候首先访问下一个节点,然后递归从最后一个节点输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 面试题