面试题5
来源:互联网 发布:jquery 格式化json 编辑:程序博客网 时间:2024/06/03 22:07
面试题5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值
遍历链表的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出,“后进先出”,我们可以用栈实现这种顺序。每遍历一个结点时就把该节点放入栈中,遍历完整个链表在从栈顶开始输出节点的值。
代码如下:
void ReversedStack(ListNode* Head){ListNode* Node=Head;stack<ListNode*> node;while(Node!=NULL){node.push(Node);Node=Node->_next; }while(!node.empty()){Node=node.top();cout<<Node->_val<<" ";node.pop();} cout<<endl;}
递归实现,我们每次访问到一个结点时,先递归出他后面的结点,在输出自身。
代码如下:
void ReversedOrder(ListNode* Head){ListNode* Node=Head;if(Node!=NULL){if(Node->_next!=NULL){ReversedOrder(Node->_next);}cout<<Node->_val<<" ";}}上述递归代码简洁,但存在问题,当链表很长是,函数调用的层级很深,导致函数调用栈溢出。
完整代码:
#include<iostream>#include<stdlib.h>#include<stack>using namespace std;//链表节点定义struct ListNode{int _val;ListNode* _next;};//创建一个链表结点ListNode* creat(int val){ListNode *Node=new ListNode();Node->_val=val;Node->_next=NULL;return Node;}void AddToTail(ListNode** Head,int val){ListNode* New=new ListNode();//新插入结点New->_val=val;New->_next=NULL;if(*Head==NULL)//空链表{*Head=New;}else{ListNode* Node=*Head;while(Node->_next!=NULL)Node=Node->_next;Node->_next=New;}}void ReversedStack(ListNode* Head){ListNode* Node=Head;stack<ListNode*> node;while(Node!=NULL){node.push(Node);Node=Node->_next; }while(!node.empty()){Node=node.top();cout<<Node->_val<<" ";node.pop();} cout<<endl;}void ReversedOrder(ListNode* Head){ListNode* Node=Head;if(Node!=NULL){if(Node->_next!=NULL){ReversedOrder(Node->_next);}cout<<Node->_val<<" ";}}void Print(ListNode* Head){ListNode* Node=Head;while(Node!=NULL){cout<<Node->_val<<" ";Node=Node->_next;}cout<<endl;}int main(){ListNode* Node=creat(1);Print(Node);AddToTail(&Node,2);AddToTail(&Node,3);AddToTail(&Node,4);AddToTail(&Node,5);AddToTail(&Node,6);AddToTail(&Node,7);AddToTail(&Node,8);Print(Node);ReversedStack(Node);ReversedOrder(Node);system("pause");return 0;}运行结果:
阅读全文
0 0
- Java面试题(5)
- C++面试题5
- .net面试题5
- 面试题5
- 面试题(5)
- Java面试题(5)
- 面试题5
- 嵌入式面试题5
- 微软面试题 5
- 嵌入式面试题5
- hibernate面试题5
- 网络面试题5
- 面试题5
- 面试题5
- IOS面试题5
- c++面试题5
- 5个面试题
- 面试题总结5
- rpm
- java操作redis
- SQL查询语言的基础知识
- android与H5之间的调用
- hdu 2544【java】最短路
- 面试题5
- 输入一个日期,输出这个日期是所在年的第几天
- A+B和C
- hive安装过程:metastore(元数据存储)的三种方式之本地derby方式
- Python读取包含中文字符文件时报错
- 在二叉查找树中插入节点
- git撤销回退版本
- Collection与Iterator
- rafy中的枚举字段in查询解决方法