您的位置:首页 > Web前端

剑指offer 从尾到头打印链表

2016-05-08 10:46 363 查看
<剑指offer第五题>

思路:在不改变链表结构的情况下,要从头到尾扫描链表,然后再从尾到头输出,这是一种“先进后出”的思路。最直观的想法就是利用栈来完成。

vector<int> printListFromTailToHead(struct ListNode* head) {
vector<int> result;
stack<int> output;
while(head)
{
output.push(head->val);
head=head->next;
}
while(!output.empty())
{
int num=output.top();
result.push_back(num);
output.pop();
}

return result;

}


从栈又可以想到递归,因为递归本质上就是一个栈结构。每访问到一个结点时,先输出它后面的结点,再输出结点本身,这样链表的输出结果就反过来了。

但递归的问题就在于,当链表非常长时,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。

void recurse(struct ListNode* head, vector<int> &result){
if(head)
{
if(head->next)
recurse(head->next,result);
result.push_back(head->val);
}

}

vector<int> printListFromTailToHead(struct ListNode* head){
vector<int> result;
if(head)
{
recurse(head,result);
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: