首页 > 代码库 > 从尾到头打印单链表
从尾到头打印单链表
题目:从尾到头打印链表。输入一个单链表的头结点,从尾到头反过来打印出每个结点的值。链表结点定义如下:
struct ListNode{ int m_nValue; ListNode* m_pNext; };
分析:考虑栈操作的类似性,可以建立堆栈然后输出。实现代码如下:
void PrintListReversingly_Iteratively(ListNode* pHead){ std::stack<ListNode*>=nodes; ListNode* pNode=pHead; while(pNode!=NULL){ nodes.push(pNode); pNode=pNode->m_pNext; } while(!nodes.empty()){ pNode=nodes.top(); printf("%d\t",pNode->m_nValue); nodes.pop(); } }
既然想到用堆栈,就可以想到递归在本质上也是堆栈结构,于是我们可以用递归来实现。要实现反过来输出链表,我们每访问到一个节点的时候,先递归输出她后面的结点,在输出该节点自身就可以了。实现代码如下:
void PrintListReversingly_Recursively(ListNode* pHead){ if(pHead!=NULL){ if(pHead->m_pNext!=NULL){ PrintListReversingly_Recursingly(pHead->m_pNext); } printf("%d\t",pHead->m_nValue); } }
递归的方法有个问题:当链表非常长时,就会导致函数调用的层级很深,从而有可能导致函数调用的栈溢出。显式的栈基于循环实现的代码的鲁棒性要好一些。
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1581618
从尾到头打印单链表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。