输入一个链表,从尾到头打印链表每个节点的值。
递归到最后,在一个个的添加进List
1234567891011121314 | public ArrayList<Integer> (ListNode listNode) { ArrayList<Integer> res = new ArrayList<>(); printListFromTailToHead(listNode, res); return res;}public void (ListNode node, List<Integer> res) { if (node != null) { printListFromTailToHead(node.next, res); res.add(node.val); }} |
使用栈从头到尾装入所有节点即可,因为栈先进后出的特性,在弹出的时候就是从尾到头
123456789101112131415 | public ArrayList<Integer> (ListNode listNode) { ArrayList<Integer> res = new ArrayList<>(); Stack<ListNode> stack = new Stack<>(); ListNode node = listNode; while (node != null) { stack.add(node); node = node.next; } while (!stack.empty()) { node = stack.pop(); res.add(node.val); } return res;} |
反转链表后再打印
1234567891011121314151617181920212223242526 | public ArrayList<Integer> printListFromTailToHead3(ListNode listNode) { ArrayList<Integer> res = new ArrayList<>(); ListNode node = reverseList(listNode); while (node != null) { res.add(node.val); node = node.next; } return res;}public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode next; while (head != null) { next = head.next; head.next = pre; pre = head; head = next; } return pre;} |
来源:https://www.cnblogs.com/liuzhongrong/p/12371404.html