【剑指offer】从尾到头打印链表

题目链接:https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

思路
可以先从头到尾对链表中的值进行存储,然后将存储的数据从尾到头进行返回。

首先遍历从头到尾,需要的是从尾到头,符合数据结构中栈的特点,”后进先出“,因此我们可以使用栈进行开发。

代码实现:

public class PrintNodeByTail {
     static class ListNode {
         int val;
         ListNode next = null;

         ListNode(int val) {
             this.val = val;
         }
     }
    //使用两个链表
    public static ArrayList<Integer> printList(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<>();
        ArrayList<Integer> list1 = new ArrayList<>();
        while (listNode != null) {
            list.add(listNode.val);
            listNode = listNode.next;
        }
        for (int i = list.size() - 1; i >= 0; i--) {
            list1.add(list.get(i));
        }
        return list1;
    }

    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){
        //定义一个栈堆,利用栈的特性 先进后出的,取出来的的时候就实现了从尾部打印到头部
        Stack<Integer> stack = new Stack<>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }

        ArrayList<Integer> list = new ArrayList<>();
        while (!stack.isEmpty()) {
            //将出栈的元素取出来放在list集合中
            list.add(stack.pop());
        }
        return list;
    }

    public static void main(String[] args) {
        ListNode list1Node1 = new ListNode(2);
        ListNode list1Node2 = new ListNode(4);
        ListNode list1Node3 = new ListNode(3);
        list1Node1.next = list1Node2;
        list1Node2.next = list1Node3;
        System.out.println(printListFromTailToHead(list1Node1));
        System.out.println(printList(list1Node1));
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值