剑指offer:面试题5——从尾到头打印链表
题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
思路是,从尾到头的时候,如果直接遍历需要循环遍历O(n!),每次都从头遍历,或者改变链表结构,编程双向链表,O(n),如果借助一个栈,则可以大大提高效率。
从头到尾遍历一次链表并将元素入栈,则出栈时候值自然是倒序了。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector <int> vec;
stack <int> ss;
ListNode *p=head;
//if(head == nullptr) return;
while(p!=NULL)
{
ss.push(p->val);
p=p->next;
}
while(!ss.empty())
{
vec.push_back(ss.top());
ss.pop();
}
return vec;
}
};
本文介绍了一种面试题,要求输入一个链表并按从尾到头的顺序返回ArrayList。通过分析,使用栈可以高效地解决此问题,避免了O(n^2)的复杂度,实现了O(n)的时间复杂度。
353

被折叠的 条评论
为什么被折叠?



