首页 > 其他 > 详细

【06】反转链表三种方法

时间:2020-02-21 21:13:37      阅读:79      评论:0      收藏:0      [点我收藏+]

题目

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

思路

我最开始的思路还是索引倒填解决,AC之后看题解,才想起这不是栈吗。(递归也是栈的一种

收获

最大的收获就是递归解法,如果在某行递归的话,就会在那一行开始建栈,所以可以把out指令放在下一行,实现类似反转的效果,因为他是递归完了之后从最深的一次开始向外执行,先执行最深的out指令。
stack的pop不返回什么元素,取栈顶方法是top()

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
///法一
    vector<int> reversePrint(ListNode* head) {
        int len =-1;
        ListNode* tmp =head;
        while(tmp!=NULL){ 
            tmp=tmp->next;
            len++;
        }
        tmp = head;
        vector<int> v(len+1);
        while(len>=0){
            v[len--]=tmp->val;
            tmp=tmp->next;
        }
        return v;
    }
法二 栈
    vector<int> reversePrint(ListNode* head){
        stack<int> s;
        vector<int> v;
        while(head){
            s.push(head->val);
            head = head->next;
        }
        while(!s.empty()){
            v.push_back(s.top());
            s.pop();
        }
        return v;
    }

//法三递归
    vector<int> ans;
    vector<int> reversePrint(ListNode* head){
        if(head==NULL) return ans; 
        else{
            reversePrint(head->next);
            ans.push_back(head->val);
        }
        return ans; 
    }
};

【06】反转链表三种方法

原文:https://www.cnblogs.com/Jun10ng/p/12342976.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!