题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
解答方法
方法一:堆栈
思路
利用栈先进后出的原理,遍历列表压入栈,最后从栈顶一个一个拿出
代码
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
stack = []
p=head
while p != None:
stack.append(p.val)
p = p.next
res =[]
for i in range(len(stack)):
res.append(stack.pop())
return res
时间复杂度
O(n)
空间复杂度
O(n)
方法二:递归
思路
假设 head.next 已经排好序,那么只需将 head 添加到末尾即可。
其中,head.next 部分可以使用递归来实现,递归的终止条件为 head 为空。
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
if head == None:
return []
return self.reversePrint(head.next) + [head.val]
时间复杂度
O(n)
空间复杂度
O(n)
网友评论