题目:
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
考虑用栈
public void invertedList1(ListNode head) {
if (head == null) {
return;
}
ListNode p = head;
Stack<Integer> stack = new Stack<Integer>();
while (p != null) {
stack.push(p.val);
p = p.next;
}
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
用递归
public void invertedList(ListNode head) {
if (head == null) {
return;
}
invertedList(head.next);
System.out.println(head.val);
}
有个问题:
当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。显示用栈基于循环实现的代码鲁棒性要好些。