您的位置:首页 > Web前端

剑指offer 输出链表/逆序输出

2017-11-19 10:40 281 查看
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

typedef int datatype;

struct Node
{
datatype value;
Node* Next_Node;
};

//从头到尾打印链表中的结点
/*面试官是否允许这个函数允许改变输入,也就是改变输入链表的顺序是一个交流点*/
bool Print_Node(Node **first)
{
if (first == NULL || *first == NULL)
{
return false;
}

Node *Node_temp = *first;
vector<Node*> My_Nodes;
//利用栈的先进后出的特点也是比较好的
stack <Node*> My_Nodes2;

while (Node_temp != NULL)
{
My_Nodes.push_back(Node_temp);
My_Nodes2.push(Node_temp);//进
Node_temp = Node_temp->Next_Node;
}

vector<Node*>::iterator it1 = My_Nodes.end();
for (it1;it1 != My_Nodes.begin();it1--)
{
cout<<(*it1)->value<<endl;
}

while (!My_Nodes2.empty())
{
Node_temp = My_Nodes2.top();//出,栈顶元素赋值
cout<<Node_temp->value<<endl;
My_Nodes2.pop();
}
}

void main()
{

system("pause");
}

对于较为简单的题,还是有很多需要注意的地方:

面试官是否允许改变输入的参数(链表)
使用递归来打印链表时,如果链表过长,会导致函数调用的层级很深,造成函数调用栈的溢出
循环、递归、栈、链表,这几点知识的相关性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息