算法题动手编程,记录学习过程,解题思路
题目
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1156001
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路
从尾到头逆向输出,后进先出——栈;
遍历链表同时入栈,遍历结束执行出栈
实现代码
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<stack>
#include<vector>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
vector<int> printListFromTailToHead(ListNode* head)
{
stack<ListNode*> nodes;
vector<int> values;
ListNode* node_1 = head;
while(node_1!=nullptr)
{
nodes.push(node_1);
node_1 = node_1->next;
}
while(!nodes.empty())
{
ListNode* node = nodes.top();
values.push_back(node->val);
nodes.pop();
}
return values;
}
int main()
{
ListNode* head = new ListNode(1);
ListNode* one = new ListNode(2);
ListNode* two = new ListNode(3);
head->next = one;
one->next = two;
vector<int> vals;
vals = printListFromTailToHead(head);
for(auto i=vals.begin();i!=vals.end();i++)
{
cout<< *i <<endl;
}
}
运行时间:3ms
占用内存:376k
易错分析
此处头节点就是第一个节点