从尾到头打印链表

来源:互联网 发布:网络药理学会议 编辑:程序博客网 时间:2024/06/05 16:28

题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
实现如下:

package cn.yzx.nowcoder;import java.util.ArrayList;import java.util.Stack;/** * 题目描述: * 输入一个链表,从尾到头打印链表每个节点的值。 * @author yzx * */public class PrintListFromTailToHead {    public static void main(String[] args) {        ListNode list1 = new ListNode(1);        ListNode list2 = new ListNode(2);        list1.next = list2;        ListNode list3 = new ListNode(3);        list2.next = list3;        ListNode list4 = new ListNode(4);        list3.next = list4;        ArrayList<Integer> res = printListFromTailToHead(list1);        System.out.println("倒置数据");        System.out.println(res);    }    public static class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }    }    //思路:要实现链表的倒置打印,可以通过栈来实现。    public static ArrayList<Integer> printListFromTailToHead1(ListNode listNode) {        ArrayList<Integer> list = new ArrayList<Integer>();        //用栈来保存数据,以便倒置存入ArrayList        Stack<Integer> tmp = new Stack<Integer>();        while(listNode != null){            tmp.push(listNode.val);            listNode = listNode.next;        }        while(!tmp.isEmpty()){            list.add(tmp.pop());        }        return list;    }    //第二种方法思路:通过递归来实现,递归的实质还是栈    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {        ArrayList<Integer> list = new ArrayList<Integer>();        if(listNode != null){            if(listNode.next != null){                list = printListFromTailToHead(listNode.next);            }            list.add(listNode.val);        }        return list;    }}
1 0