输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
解法一:
栈。创建一个新的列表,然后从尾到头遍历。时间和空间复杂度都是O(n)
# 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]:
stack = []
while(head):
stack.append(head.val)
head = head.next
return stack[::-1]
解法二:
递归法。每次都返回后一个的反向打印函数加当前的值。时间和空间复杂度都是O(n)
# 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:
return self.reversePrint(head.next) + [head.val]
return []
通过这道题目我学到的:
1.python切片方法
seq[start:end:step]
2.递归法