您的位置:首页 > 其它

从尾到头打印链表

2015-07-02 20:45 211 查看


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


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

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: