首页 > 其他 > 详细

从尾到头打印链表

时间:2015-07-03 09:22:14      阅读:196      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!