跳至主要內容

06-从尾到头打印链表

daipeng小于 1 分钟

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

输入

head=[1,2,3]

使用数组形式输出

[3,2,1]

这道题比反转链表要简单一些。

顺序遍历链表,然后将节点值压入栈中,最后依次弹出即可。

递归

递归和栈实际上是一样的,可以通过递归模拟栈,递归结束后将节点加入数组中即可达到反转的效果。

   public int[] reversePrint(ListNode head) {
        if (head == null) {
            return null;
        }
        List<Integer> data = new ArrayList<>();
        traverse(head, data);
        return data.stream().mapToInt(Integer::intValue).toArray();
    }

    private void traverse(ListNode node, List<Integer> data) {
        if (node == null) {
            return;
        }
        traverse(node.next, data); 
        data.add(node.val);
    }

14 15行的顺序一定不要弄错,递归的执行可以看成这样的:

traverse
  traverse 下一个节点
  	 traverse 下一个节点
  			 traverse 下一个节点
  			 ....
  			 data.add(当前节点的value) 次次次外层
  	 data.add(当前节点的value) 次次外层
   data.add(当前节点的value) 次外层
data.add(当前节点的value) 最外层