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

来源:互联网 发布:java redis 清除缓存 编辑:程序博客网 时间:2024/06/02 04:52

题目描述

输入一个链表,从尾到头打印链表每个节点的值。


import java.util.ArrayList;public class TestLinkList {    //保存递归数据    private ArrayList<Integer> arrayList = new ArrayList<>();    public static void main(String[] args) {        TestLinkList linkList = new TestLinkList();        ListNode listNode1 = linkList.new ListNode(1);        ListNode listNode2 = linkList.new ListNode(2);        ListNode listNode3 = linkList.new ListNode(3);        ListNode listNode4 = linkList.new ListNode(4);        ListNode listNode5 = linkList.new ListNode(5);        listNode1.next = listNode2;        listNode2.next = listNode3;        listNode3.next = listNode4;        listNode4.next = listNode5;        ArrayList<Integer> arrayList2 = new TestLinkList().printListFromTailToHead2(listNode1);        System.out.println(arrayList2.toString());    }    /**     * 递归, 效果等同于栈     */    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        if (listNode != null) {            this.printListFromTailToHead(listNode.next);            arrayList.add(listNode.val);        }        return arrayList;    }    /**     * 正向遍历节点所有值放在ArrayList,然后倒序输出     */    public ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {        if (listNode == null) {            return new ArrayList<>();        }        ArrayList<Integer> arrayList = new ArrayList<>(); // 存放正序值        ArrayList<Integer> revArrayList = new ArrayList<>();// 存放倒序值        while (listNode != null) {            arrayList.add(listNode.val);            listNode = listNode.next;        }        for (int i = arrayList.size() - 1; i >= 0; i--) {            revArrayList.add(arrayList.get(i));        }        return revArrayList;    }    class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }        ListNode() {        }    }}
2 0
原创粉丝点击