题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
思路:
- 遍历的顺序是从头到尾的顺序,可输出的顺序确实从尾到头。这就是典型的“后进先出”,我们可以用栈实现这种顺序。
- 想到用栈实现函数,而递归在本质上就是一个栈结构,于是同样可以采用递归来实现。
Java题解
// 栈实现
public void printListReversingly(ListNode root) {
ListNode preroot = new ListNode(-1);
preroot.next = root;
Stack<Integer> stack = new Stack<Integer>();
while (preroot.next != null) {
stack.add(preroot.next.val);
preroot = preroot.next;
}
while (!stack.isEmpty()) {
System.out .println(stack.pop());
}
}
//递归实现
public void printListReversingly2(ListNode root) {
if (root != null) {
printListReversingly2(root.next);
System.out.println(root.val);
}
}
Python 题解
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reversePrint(self, head):
"""
:type head: ListNode
:rtype: List[int]
"""
if head:
return self.reversePrint(head.next)+[head.val]
else:
return []