码迷,mamicode.com
首页 > 其他好文 > 详细

从尾到头打印链表

时间:2015-07-03 09:25:17      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:链表   递归   

技术分享题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。(不能改变链表的结构)

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_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_Recursively(pHead->m_pNext);
}
printf("%d\t", pHead->m_nValue);
}
}

    



版权声明:本文为博主原创文章,未经博主允许不得转载。

从尾到头打印链表

标签:链表   递归   

原文地址:http://blog.csdn.net/wangfengfan1/article/details/46730931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!