从尾到头打印链表
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);
}
}
相关文章推荐
- 大话设计の创建模式
- 【Linear Support Vector Machine】林轩田机器学习技法
- gulp系列文章一 fis vs grunt vs gulp,为什么要是gulp呢?
- Android Service解析
- hdu 4169 二分匹配最大独立集 ***
- IOS中定时器NSTimer的开启与关闭
- XCode: 如何添加自定义代码片段
- State Pattern状态模式(三)
- Java多线程下载
- strcpy/strncpy/strcat/strcmp/strlen函数的c语言实现
- 智能算法之仿生算法
- PHP
- 捕获程序异常之tryCatch
- 5、rm命令
- mysql5.6 忘记root密码
- STM32W108无线ZigBee射频芯片引脚说明(上篇)
- 配置iptables
- Android字数限制的EditText实现方案研究
- GC Tuning -GC优化
- 我所见过的最简短、最灵活的javascript日期转字符串工具函数