时间限制:1秒 空间限制:32768K
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
原始解法-利用堆栈的性质:先进后出
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> temp;
stack<int> stacktmp;
while(head != nullptr)
{
stacktmp.push(head->val);
head = head->next;
}
while(!stacktmp.empty())
{
temp.push_back(stacktmp.top());
stacktmp.pop();
}
return temp;
}
运行时间:3ms
占用内存:480k
优化解法-利用递归调用栈的性质
vector<int> temp;
vector<int> &printListFromTailToHead(ListNode* head) {
if(head != nullptr)
{
if(head->next != nullptr)
{
temp = printListFromTailToHead(head->next);
}
temp.push_back(head->val);
}
return temp;
}
运行时间:4ms
占用内存:392k
上面基于递归的代码看起来很简洁,但是,当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。显然用栈基于循环实现的代码的鲁棒性要好一些。