#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"); }
对于较为简单的题,还是有很多需要注意的地方:
- 面试官是否允许改变输入的参数(链表)
- 使用递归来打印链表时,如果链表过长,会导致函数调用的层级很深,造成函数调用栈的溢出
- 循环、递归、栈、链表,这几点知识的相关性