从尾到头打印链表
来源:互联网 发布:谁封装windows系统好 编辑:程序博客网 时间:2024/05/29 19:28
题目
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
分析
通常打印是一个只读操作,不希望打印时修改内容。假设该题目要求不能改变链表的结构。
遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是第一个遍历的结点最后一个输出,而最后一个遍历到的结点第一个输出。这就是典型的“后进先出”,我们可以利用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反过来了。
代码
#include<stdio.h>#include<iostream>#include <stack>using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;void printListReversingly(LinkList L);void create_end(LinkList &L,int n); /*后插法创建单链表*/ void create_end(LinkList &L,int n) { L = new LNode; L->data = 2013211553; //头结点里面的放入学号 ^_^,方便做测试 L->next = NULL; //新建一个带头结点的链表 LNode* r = L; // 尾指针r指向头结点 for(int i=0; i<n;i++) { LNode* node = new LNode; cin>>node->data; //输入元素值 node->next=NULL; r->next=node; //将node插入到表尾 r = node; //r指向新的尾结点 }} /*使用stack来从尾开始打印链表*/void printListReversingly(LinkList L) { std::stack<LNode*> stacklist; LNode* p = L; while(p != NULL) { stacklist.push(p); p = p->next; } while(!stacklist.empty()){ p = stacklist.top(); printf("%d, ",p->data); stacklist.pop(); }}void main(){ int length = 0; LNode* head = new LNode; printf("请输入链表的长度 "); scanf("%d",&length); create_end(head,length); printListReversingly(head);}
截图
0 0
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- OkHttp完全解析(三)并发
- 高仿饿了么订餐界面
- Eclipse反编译工具Jad及插件JadClipse配置
- http server与tomcat的区别
- Intent调用系统的拍照保存原图
- 从尾到头打印链表
- Android开发sdk的相关问题
- Ant如何打包UIAutomator项目用到的第三方JAR包
- 【bug记录】mysql5.7.9-win64 的3534问题
- OkHttp完全解析(四)连接Connections
- BitmapFactory
- SSH:Struts2框架(Tag标签的使用)
- VIM入门配置
- 字节流