您的位置:首页 > Web前端

剑指offer-5 从尾到头打印链表

2015-04-29 11:03 459 查看
#include <iostream>
#include <cstdlib>
#include <stack>
#include <vector>
using namespace std;

struct LinklistNode
{
int value;
LinklistNode* next;
LinklistNode(int val) : value(val),next(nullptr) {}
};
/*
方法一、正常打印链表。将链表的值压入栈中,然后出栈
*/
vector<int> PrintListReversing(LinklistNode* head)
{
if(head==nullptr)
exit(EXIT_SUCCESS);

stack<LinklistNode*> nodes;

LinklistNode* temp = head;
while(temp!=nullptr)
{
nodes.push(temp);
temp = temp->next;
}
vector<int> result;
while(!nodes.empty())
{
result.push_back(nodes.top()->value);
nodes.pop();
}
return result;
}

/*
方法二、递归在本本质上就是一个栈结构
在打印当前结点值的时候,首先打印该节点的下一个结点
*/

void PrintListReversing_2(LinklistNode* head)
{

if(head!=nullptr)
{
if(head->next != nullptr)
{
PrintListReversing_2(head->next);
}
cout<<head->value<<endl;
}
}
int main()
{
LinklistNode* head = new LinklistNode(2);
LinklistNode* node1 = new LinklistNode(3);
LinklistNode* node2 = new LinklistNode(4);
LinklistNode* node3 = new LinklistNode(5);
LinklistNode* node4 = new LinklistNode(6);

head->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = nullptr;

//vector<int> result = PrintListReversing(head);
PrintListReversing_2(head);
/*vector<int>::iterator iter = result.begin();

for(; iter!= result.end(); iter++)
cout<<*iter<<endl;
*/
delete head;
delete node1;
delete node2;
delete node3;
delete node4;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: