码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer 从尾到头打印链表

时间:2016-05-08 11:46:24      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

<剑指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;    
    }

 

剑指offer 从尾到头打印链表

标签:

原文地址:http://www.cnblogs.com/summerkiki/p/5469987.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!