剑指offer-面试题5.从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出。
但是这种情况破坏了链表的结构。
如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据
结构---栈 当我们从前往后遍历链表逐个压栈 然后遍历结束后再
逐个出栈。
首先我们先来用第一种方式实现:
#include <iostream>
using namespace std; struct ListNode
{
int data;
struct ListNode *next;
}; struct ListNode* CreateList()
{
struct ListNode* Head,*p;
Head=(struct ListNode*)malloc(sizeof(ListNode));
Head->data=;
Head->next=NULL;
p=Head; cout<<"Create List....(0-exit!)"<<endl;
while(true)
{
int Data;
cin>>Data;
if(Data!=)
{
struct ListNode* NewNode;
NewNode=(struct ListNode*)malloc(sizeof(ListNode));
NewNode->data=Data;
NewNode->next=NULL;
p->next=NewNode;
p=p->next;
}
else
{
break;
}
} return Head->next;
} void PrintList(struct ListNode* Head)
{
cout<<"The List is: "; struct ListNode *p;
p=Head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
} struct ListNode* ReversePrint(struct ListNode* Head)
{
struct ListNode *p1,*p2,*p3; p1=Head;
p2=p1->next; while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
} Head->next=NULL;
return p1;
} int main()
{
ListNode *Head,*NewHead;
Head=CreateList();
PrintList(Head);
NewHead=ReversePrint(Head); cout<<endl<<"The Reverse List is:"<<endl;
PrintList(NewHead);
return ;
}
截图:

注意:这种情况下是破坏了链表的结构了。
下面我们用栈结构来实现不破链表本身结构的逆序输出:
#include <iostream>
#include <stack>
using namespace std; struct ListNode
{
int data;
struct ListNode *next;
}; struct ListNode* CreateList()
{
struct ListNode* Head,*p;
Head=(struct ListNode*)malloc(sizeof(ListNode));
Head->data=;
Head->next=NULL;
p=Head; cout<<"Create List....(0-exit!)"<<endl;
while(true)
{
int Data;
cin>>Data;
if(Data!=)
{
struct ListNode* NewNode;
NewNode=(struct ListNode*)malloc(sizeof(ListNode));
NewNode->data=Data;
NewNode->next=NULL;
p->next=NewNode;
p=p->next;
}
else
{
break;
}
} return Head->next;
} void PrintList(struct ListNode* Head)
{
cout<<"The List is: "; struct ListNode *p;
p=Head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
} void ReversePrintByStack(struct ListNode* Head)
{
struct ListNode* p;
p=Head; stack<int> S; while(p!=NULL)
{
S.push(p->data);
p=p->next;
} cout<<"Reverse To Print LinkList: ";
while(!S.empty())
{
cout<<S.top()<<" ";
S.pop();
} cout<<endl;
} int main()
{
ListNode *Head,*NewHead;
Head=CreateList();
PrintList(Head);
ReversePrintByStack(Head);
return ;
}
截图:

哎 好困。
剑指offer-面试题5.从尾到头打印链表的更多相关文章
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例.每一组测试案例 ...
- JS 剑指Offer(四) 从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 首先定义一下链表中的节点,关于链表这个数据结构在另外一篇文章中会详细讲 function ListNode(val) { t ...
- 剑指offer【03】- 从尾到头打印链表(4种实现方法)
题目:从尾到头打印链表 考点:链表 题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 法一:ArrayList头插法 /** * public class ListNode ...
- 剑指offer(3)从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值. 题目分析 比较简单,主要注意下从尾到头,可以用栈可以用递归,我给出我比较喜欢的代码吧 代码 /* function ListNode(x){ t ...
- 剑指offer第二版-6.从尾到头打印链表
描述:输入一个链表的头节点,从尾到头打印每个节点的值. 思路:从尾到头打印,即为“先进后出”,则可以使用栈来处理:考虑递归的本质也是一个栈结构,可递归输出. 考点:对链表.栈.递归的理解. packa ...
- 【剑指Offer】3、从尾到头打印链表
题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路: (三种方法:借助栈.递归.列表的首位插入) 从头到尾打印链表比较简单,从尾到头很自然的可以 ...
- 剑指Offer编程题3——从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目解析 方法1:建立两个vector,第一个用来存储正向访问的数据,第二个用来反向存储. /** * struct L ...
- 剑指offer_面试题5_从尾到头打印链表(栈和递归实现)
题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值 考察 单链表操作.栈.递归等概念. 理解:要实现单链表的输出,那么就须要遍历.遍历的顺序是从头到尾.而节点输出的顺序是从尾到头.因此,先 ...
- 剑指offer(5)——从尾到头打印链表
题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.结点定义如下: public class ListNode { int val; ListNode next = null; ListN ...
- 剑指Offer_编程题之从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值.
随机推荐
- POJ-2955括号匹配问题(区间DP)
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4834 Accepted: 2574 Descript ...
- 04747_Java语言程序设计(一)_第9章_输入和输出流
例9.1一个文件复制应用程序,将某个文件的内容全部复制到另一个文件. import java.io.*; public class Example9_1 { public static void ma ...
- IOS总结_无需自己定义UITabbar也可改变UITabbarController的背景和点击和的颜色
在application: application didFinishLaunchingWithOptions: launchOptions 增加以下代码就能够实现对tabbar的颜色的改动 //设定 ...
- Unity 图片的灰度处理
我们平时在做项目时,经常遇到按钮的点击而且还要区分悬浮,点击,禁用的状态,美术要针对一张图片做多个状态图片,资源图片的数量也就增大了,那么打出的包的大小也就跟着上去了,所以我们可以针对原始图片进行Sh ...
- Flashback version/Transaction Query,FlashbackTable
Flashback version Query相对于Flashback Query 只能看到某一点的对象状态, Oracle 10g引入的Flashback Version Query可以看到过去某个 ...
- ADO.NET程序访问数据的组件
组成--数据集(内存中的数据库) --DataSet数据集 --DataTable数据表 --DataColumn数据列 --DataRow数据行 --DataView数据视图--NET数据提供程序 ...
- Android界面优化方法
我们在推出一款APP之后,中间出现了一些体验上的问题,一个明显的是界面卡顿,针对此问题我们采取了如下的一些措施,起到了一些效果. 1.优化界面层次 针对可以合并的界面层次进行合并,减少界面的渲染,这个 ...
- Code Review中应该关注的点
Magic number/string If statement, you should always use single line or brackets Provide default valu ...
- Ubuntu14.04配置arm-linux-gcc 4.4.3交叉编译环境
首先下载交叉编译:不多说,直接贴地址了 http://arm9download.cncncn.com/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.g ...
- 算法_Longest Palindromic Substring(寻找最长回文字串)
题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum le ...