剑指 Offer 06 从尾到头打印链表

①题目:给一个链表,以从尾到头的顺序把元素放到数组中返回。

public int[] reversePrint(ListNode head)

思路:1.先遍历一遍链表,得到size。然后用size声明数组res,再遍历一遍链表,把每个元素反着放到res中。没有额外的空间使用,时间复杂度O(n)。
2.也可以用栈存储遍历的元素,再弹出放到数组中。

public int[] reverseList(ListNode head){
        if(head == null){
            return new int[]{};
        }
        ListNode p = head;
        int size = 0;
        while(p != null){
            size++;
            p = p.next;
        }
        int[] res = new int[size];
        p = head;
        //因为size一样,所以p不用判空
        for (int i = size-1; i >= 0; i--) {
            res[i] = p.val;
            p = p.next;
        }
        return res;
    }

②题目:给一个链表,从尾到头打印元素,没有返回值。

public void reversePrint(ListNode head)

思路:1.先反转链表(遍历一遍链表),再打印。如果不想修改链表参数,就再反转一下(再遍历一遍链表)。无额外的空间使用。
细节看 反转链表 那一题。
2.用栈保存链表元素,弹出再逐个输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值