从尾到头打印链表

来源:互联网 发布:autodesk maya mac 编辑:程序博客网 时间:2024/06/05 20:42

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

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

    



0 0
原创粉丝点击