剑指offe 面试题5, 从尾到头打印链表
Posted 努力奋斗-不断进化
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offe 面试题5, 从尾到头打印链表相关的知识,希望对你有一定的参考价值。
输入一个链表的头结点,从尾到头反过来打印每个结点的值。
C++版本
struct ListNode
int m_nKey;
ListNode* m_pNext;
;
方法1 使用栈的先进后出,将每个结点存入到栈中,然后输出。
#include<iostream>
#include<stack>
struct ListNode
int m_nKey;
ListNode* m_pNext;
;
void PrintListReversingly_Iteratively(ListNode* pHead)
std::stack<ListNode*> nodes;
ListNode* pNode = pHead;
while (pNode != NULL)
nodes.push(pNode);
pNode = pNode->m_nKey;
while (!nodes.empty())
pNode = nodes.top();
printf("%d\\t", pNode->m_nKey);
nodes.pop();
方法2
//递归本质上是一个栈结构,可以用递归实现,每访问到一个结点的时候,先递归输出它后面的结点,
//在输出结点本身,这样链表的输出结果就反过来了。
void PrintListReversingly_Recuesively(ListNode* pHead)
if (pHead != NULL)
if (pHead->m_pNext != NULL)
PrintListReversingly_Recuesively(pHead->m_pNext);
printf("%d\\t", pHead->m_nKey);
//如果链表非常长,就会导致函数调用的层级很深,从而导致函数调用栈溢出,显式用栈基于循环实现的代码鲁棒性要好一些。
以上是关于剑指offe 面试题5, 从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode | 面试题06. 从尾到头打印链表剑指OfferPython