[Java] 输入一个链表,按链表从尾到头的顺序返回一个ArrayList 三种解决方案
从尾到头打印链表
http://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
第一种解决方法:使用ArrayList<>()先添加,然后倒序在折腾到另外一个ArrayList<>()里面
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if (listNode == null) { return new ArrayList<Integer>(); } ArrayList<Integer> al = new ArrayList<>(); ArrayList<Integer> res = new ArrayList<>(); ListNode temp = listNode; while (temp != null) { al.add(temp.val); temp = temp.next; } for (int i = al.size() - 1; i >= 0; i--) { res.add(al.get(i)); } return res; }
第二种解决方法:使用ArrayList<>()的指定位置添加,每次都插入在第一个位置,这样就实现了倒序
public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) { if (listNode == null) { return new ArrayList<Integer>(); } ArrayList<Integer> res = new ArrayList<>(); ListNode temp = listNode; while (temp != null) { res.add(0, temp.val); temp = temp.next; } return res; }
第三种解决方法:因为是倒序,符合先进后出,明显就是栈了
public static ArrayList<Integer> printListFromTailToHeadStack(ListNode listNode) { if (listNode == null) { return new ArrayList<Integer>(); } ListNode temp = listNode; Stack<Integer> stack = new Stack<>(); while (temp != null) { stack.push(temp.val); temp = temp.next; } ArrayList<Integer> res = new ArrayList<>(); while (!stack.isEmpty() && stack.size() != 0) { res.add(stack.pop()); } return res; }