从尾到头打印链表

问题描述:

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

限制:
0 <= 链表长度 <= 10000


例子

示例 1:

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


提示:


代码实现:

解题思路:
考虑到数组的方式更快,并且限制长度也不是很长,所以一开始想到辅助数组的方式,利用一个辅助数组先将数加入到数组,通过计数得到长度,再从辅助数组末尾依次把数加到返回 数组中,缺点是辅助数组的长度必须为10001;
或者利用辅助栈先进后出的特点,先将数压入栈中,最后出栈放入返回数组。

1.辅助数组:

  public static int[] reversePrint(ListNode head) {
          if (head==null) return new int[0];
          int [] aid = new int[10001];
          int i=0;
          while (head != null){
              aid[++i]= head.val;
              head=head.next;
          }
          int []res=new int[i];
          for (int j=0;i>0;j++){
              res[j]=aid[i--];
          }
          return res;
        }

2.辅助栈:

public static int[] reversePrint2(ListNode head) {
        if (head==null) return new int[0];
        Stack<Integer>stack=new Stack<Integer>();
        while (head != null){
            stack.push(head.val);
            head=head.next;
        }
        int []res=new int[stack.size()];
        int i=0;
        while (!stack.isEmpty()){
            res[i++]=stack.pop();
        }
        return res;
    }

运行结果:

发现数组方式确实要比栈快一点

在这里插入图片描述


题目来源:力扣(LeetCode)
链接: LeetCode题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天将降大任于我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值