zoukankan      html  css  js  c++  java
  • 【06】反转链表三种方法

    题目

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

    思路

    我最开始的思路还是索引倒填解决,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; 
        }
    };
    
    个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
  • 相关阅读:
    书法的艺术
    书法的艺术
    matlab gabor 滤波器
    matlab gabor 滤波器
    生活中的物理学(电学)
    生活中的物理学(电学)
    CCD 与 CMOS
    CCD 与 CMOS
    博物院与国宝
    【设计模式】学习笔记13:组合模式(Composite)
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12342976.html
Copyright © 2011-2022 走看看