从尾到头打印链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
栈
1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.ArrayList; 13 import java.util.*; 14 public class Solution { 15 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 16 17 Stack<Integer> s = new Stack<Integer>(); 18 ListNode p = listNode; 19 while (p != null) { 20 s.push(p.val); 21 p = p.next; 22 } 23 ArrayList<Integer> ans = new ArrayList<Integer>(); 24 while (!s.empty()) { 25 ans.add(s.pop()); 26 } 27 return ans; 28 29 } 30 31 }
递归
1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.ArrayList; 13 import java.util.*; 14 public class Solution { 15 public void work(ListNode p, ArrayList<Integer> ans) { 16 if (p == null) return; 17 work(p.next, ans); 18 ans.add(p.val); 19 20 } 21 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 22 ArrayList<Integer> ans = new ArrayList<Integer>(); 23 work(listNode, ans); 24 return ans; 25 26 27 } 28 29 }