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

#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");
}  

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

  • 面试官是否允许改变输入的参数(链表)
  • 使用递归来打印链表时,如果链表过长,会导致函数调用的层级很深,造成函数调用栈的溢出
  • 循环、递归、栈、链表,这几点知识的相关性

猜你喜欢

转载自blog.csdn.net/misayaaaaa/article/details/78573067