剑指offer_面试题5_从尾到头打印链表(栈和递归实现)
来源:互联网 发布:完美动力unity3d怎么样 编辑:程序博客网 时间:2024/06/09 22:25
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值
考察 单链表操作、栈、递归等概念。
理解:要实现单链表的输出,那么就需要遍历。遍历的顺序是从头到尾,而节点输出的顺序是从尾到头。因此,先遍历到的节点后输出,这是一个典型的 “后进先出”。
要实现这样的输出,可以使用栈,或,递归。
通过这道题,让我对 “递归在本质上就是一个栈结构” 理解的更加深刻。
代码如下:
/************************************************************************//** 题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值 *//** 时间:2015.7.24 作者:jwt *//************************************************************************/#include <iostream>#include <stack>using namespace std;typedef struct node{ int value; struct node *next;}Listnode;/**创建一个单链表,n:表示节点数*/Listnode * Create_List(int n){ int i = 0, elem; Listnode *head, *temp, *curr; head = new Listnode; head->next = NULL; head->value = n; /**头结点保存数据节点个数*/ curr = head; while(i < n) /*尾插法,新节点都放在最后*/ { cout << "please input an elem: " << endl; cin >> elem; temp = new Listnode; temp->value = elem; temp->next = NULL; curr->next = temp; curr = temp; i++; } return head;}/**栈实现反向输出单链表*/void Print_List_Reverse_with_stack(Listnode *head){ Listnode *p; stack<int> temp; if(NULL == head) /*头结点为空,那么这个链表就不存在*/ return; else{ /*链表的第一个数据节点是头节点的下一个节点,因此链表为空,就是第一个数据节点为空*/ p = head->next; if(NULL == p) { cout << "该链表为空" << endl; return; } } do{ temp.push(p->value); /*遍历到的节点数据依次入栈*/ p = p->next; }while(NULL != p); while(!temp.empty()) { cout << temp.top() << ' '; /*输出栈顶元素*/ temp.pop(); /*栈顶元素出栈*/ } cout << endl;}/**递归实现反向输出单链表*/void Print(Listnode *head) /*递归函数*/{ if(NULL != head) { if(NULL != head->next) { Print(head->next); } cout << head->value << ' '; }}void Print_List_Reverse_Recursively(Listnode *head) /**加这一步的原因是防止输出头结点*/{ if(NULL == head) return; Listnode *p; p = head->next; if(NULL == p) { cout << "链表为空" << endl; return; } else{ Print(p); }}int main(){ Listnode *test; test = Create_List(5); Print_List_Reverse_with_stack(test); Print_List_Reverse_Recursively(test); return 0;}
结果如下:
/*点滴积累,我的一小步O(∩_∩)O~*/
0 0
- 剑指offer_面试题5_从尾到头打印链表(栈和递归实现)
- 剑指Offer_面试题05_从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表(递归实现)
- 剑指offer 面试题5 从尾到头打印链表(栈实现)
- 剑指Offer:面试题5——从尾到头打印链表(java实现)
- 剑指offer|面试题5:从尾到头打印链表(Java实现)
- 剑指offer面试题5 从尾到头打印链表(java实现)
- 剑指offer_链表---从尾到头打印链表
- 剑指offer_从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 《剑指Offer》面试题:从尾到头打印链表
- 剑指offer面试题 从尾到头打印链表
- 面试题5:从尾到头打印链表
- 面试题5 从尾到头打印链表
- 面试题5 从尾到头打印链表
- 面试题5:从尾到头打印链表
- 面试题5-从尾到头打印链表
- 面试题5:从尾到头打印链表
- PLSQL访问网页简单案例(一)
- 160 Intersection of Two Linked Lists
- 吐槽
- Arduino硬件开发--红外遥控舵机
- noi 2006 最大收益 最大权闭合图转最小割转最大流
- 剑指offer_面试题5_从尾到头打印链表(栈和递归实现)
- android sdk manager更新地址
- Delicious Apples(多校联合训练)
- JavaScript——DOM或以树形展示的Web页面
- 在MFC中播放音乐
- 008-Scala主构造器、私有构造器、构造器重载实战详解
- MFC 文件,文件夹操作
- C语言流程控制之循环笔记
- JavaScript权威指南_137_第15章_脚本化文档_15.8-文档和元素的几何形状和滚动-关于元素尺寸、位置、溢出的更多信息