06-从尾到头打印链表
小于 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) 最外层