输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
链表的定义如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
遍历的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说,第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出。这就是典型的"后进先出"。
from collections import deque
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def print_list_from_tail_to_head(self, node):
if not node:
return []
res = deque()
while node:
res.appendleft(node.val)
node = node.next
return list(res)
st = Solution()
node = ListNode(3)
node.next = ListNode(8)
node.next.next = ListNode(9)
node.next.next.next = ListNode(19)
node.next.next.next.next = ListNode(31)
print(st.print_list_from_tail_to_head(node))
既然想到了用栈来实现这个函数,而递归在本质上就是一个栈结构,于是很自然地又想到了用递归来实现。
class Solution:
def __init__(self):
self.res = None
def print_list_from_tail_to_head(self, node):
self.recursively(node)
return self.res
def recursively(self, node):
if node:
if node.next:
self.print_list_from_tail_to_head(node.next)
if self.res is None:
self.res = []
self.res.append(node.val)
(最近更新:2019年07月08日)