剑指offer-面试题5.从尾到头打印链表
来源:互联网 发布:更换软件图标 编辑:程序博客网 时间:2024/06/06 02:27
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出。但是这种情况破坏了链表的结构。如果面试官要求不破坏链表结构呢,这时候我们就想到了一种数据结构---栈 当我们从前往后遍历链表逐个压栈 然后遍历结束后再逐个出栈。
首先我们先来用第一种方式实现:
1 #include <iostream> 2 using namespace std; 3 4 struct ListNode 5 { 6 int data; 7 struct ListNode *next; 8 }; 9 10 struct ListNode* CreateList()11 {12 struct ListNode* Head,*p;13 Head=(struct ListNode*)malloc(sizeof(ListNode));14 Head->data=0;15 Head->next=NULL;16 p=Head;17 18 cout<<"Create List....(0-exit!)"<<endl;19 while(true)20 {21 int Data;22 cin>>Data;23 if(Data!=0)24 {25 struct ListNode* NewNode;26 NewNode=(struct ListNode*)malloc(sizeof(ListNode));27 NewNode->data=Data;28 NewNode->next=NULL;29 p->next=NewNode;30 p=p->next;31 }32 else33 {34 break;35 }36 }37 38 return Head->next;39 }40 41 void PrintList(struct ListNode* Head)42 {43 cout<<"The List is: ";44 45 struct ListNode *p;46 p=Head;47 while(p!=NULL)48 {49 cout<<p->data<<" ";50 p=p->next;51 }52 cout<<endl;53 }54 55 struct ListNode* ReversePrint(struct ListNode* Head)56 {57 struct ListNode *p1,*p2,*p3;58 59 p1=Head;60 p2=p1->next;61 62 while(p2!=NULL)63 {64 p3=p2->next;65 p2->next=p1;66 p1=p2;67 p2=p3;68 }69 70 Head->next=NULL;71 return p1;72 }73 74 int main()75 {76 ListNode *Head,*NewHead;77 Head=CreateList();78 PrintList(Head);79 NewHead=ReversePrint(Head);80 81 cout<<endl<<"The Reverse List is:"<<endl;82 PrintList(NewHead);83 return 0;84 }
截图:
注意:这种情况下是破坏了链表的结构了。
下面我们用栈结构来实现不破链表本身结构的逆序输出:
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 struct ListNode 6 { 7 int data; 8 struct ListNode *next; 9 };10 11 struct ListNode* CreateList()12 {13 struct ListNode* Head,*p;14 Head=(struct ListNode*)malloc(sizeof(ListNode));15 Head->data=0;16 Head->next=NULL;17 p=Head;18 19 cout<<"Create List....(0-exit!)"<<endl;20 while(true)21 {22 int Data;23 cin>>Data;24 if(Data!=0)25 {26 struct ListNode* NewNode;27 NewNode=(struct ListNode*)malloc(sizeof(ListNode));28 NewNode->data=Data;29 NewNode->next=NULL;30 p->next=NewNode;31 p=p->next;32 }33 else34 {35 break;36 }37 }38 39 return Head->next;40 }41 42 void PrintList(struct ListNode* Head)43 {44 cout<<"The List is: ";45 46 struct ListNode *p;47 p=Head;48 while(p!=NULL)49 {50 cout<<p->data<<" ";51 p=p->next;52 }53 cout<<endl;54 }55 56 void ReversePrintByStack(struct ListNode* Head)57 {58 struct ListNode* p;59 p=Head;60 61 stack<int> S;62 63 while(p!=NULL)64 {65 S.push(p->data);66 p=p->next;67 }68 69 cout<<"Reverse To Print LinkList: ";70 while(!S.empty())71 {72 cout<<S.top()<<" ";73 S.pop();74 }75 76 cout<<endl;77 }78 79 int main()80 {81 ListNode *Head,*NewHead;82 Head=CreateList();83 PrintList(Head);84 ReversePrintByStack(Head);85 return 0;86 }
截图:
哎 好困。
0 0
- 《剑指Offer》面试题:从尾到头打印链表
- 剑指offer面试题 从尾到头打印链表
- 面试题6:从尾到头打印链表(offer)
- 剑指offer-面试题5.从尾到头打印链表
- 剑指offer面试题5——链表之从尾到头打印链表
- 剑指offer-->面试题5 从尾到头打印链表
- [剑指offer][面试题5]从尾到头打印链表
- 【剑指offer】面试题5:从尾到头打印链表
- 剑指offer 面试题5 从尾到头打印链表(栈实现)
- 剑指offer 面试题5 从尾到头打印链表(递归实现)
- 【剑指offer】面试题5:从尾到头打印链表 java
- 剑指Offer: 面试题5 从尾到头打印链表
- 《剑指Offer》面试题5:从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 【剑指Offer学习】【面试题5 : 从尾到头打印链表】
- 《剑指Offer》学习笔记--面试题5:从尾到头打印链表
- 【剑指offer】 面试题5: 从尾到头打印链表
- 剑指offer《面试题5:从尾到头打印链表》
- Arrays类应用
- 61. Rotate List
- spring MVC报错 Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- DCOS之Mesos-DNS介绍
- JavaScript之继承和prototype
- 剑指offer-面试题5.从尾到头打印链表
- bzoj 1715(spfa 判断负环)
- POJ2236Wireless Network(结构体,并查集)
- GDAL创建图像提示Driver xxx does not support XXX creation option的原因
- Java基础知识
- JavaScript之函数
- UESTC第十四届校赛A题解题报告
- spring 配置文件中的占位符 使用 context:property-placeholder
- Android 倒计时功能的实现