zoukankan      html  css  js  c++  java
  • LeetCode-面试题06-从尾到头打印链表

    来源:力扣(LeetCode)- 面试题06

    问题

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

    示例:

    输入:head = [1,3,2]

    输出:[2,3,1]

    链表结构

    public class ListNode{
        int val;
        ListNode next;
        ListNode(int x){ val = x; }
    }
    

    解答

    递归实现

    i为计数器,记录节点的个数

    从最后一个元素开始,向数组中放入自身的值

    class Solution {
        public int[] reversePrint(ListNode head) {
            return reverse(head,0);
        }
    
        public int[] reverse(ListNode head,int i){
            if(head==null){
                return new int[i];
            }
            int[] arr = reverse(head.next,i+1);
            arr[arr.length-i-1] = head.val;
            return arr;
        }
    }
    

    执行用时:0ms

    内存消耗:40.8MB

    栈实现

    利用栈先进后出的特点,倒置读取链表的值。

    class Solution {
        public int[] reversePrint(ListNode head) {
            Stack<ListNode> stack = new Stack<>();
            ListNode temp = head;
            while(temp!=null){
                stack.push(temp);
                temp = temp.next;
            }
            int[] res = new int[stack.size()];
            int cnt = 0;
            while(!stack.isEmpty()){
                res[cnt] = stack.pop().val;
                cnt++;
            }
            return res;
        }
    }
    

    执行用时:1ms

    内存消耗:40.3MB

  • 相关阅读:
    redis操作
    MySQL架构
    MySQL查询缓存
    MySQL数据备份与还原
    Sql性能优化
    Notepad++中每一行的开头和结尾添加引号?
    分组聚合
    Python3用scan和delete命令批量清理redis数据
    VUE+django
    python转化13位时间戳
  • 原文地址:https://www.cnblogs.com/HenuAJY/p/13160521.html
Copyright © 2011-2022 走看看