LeetCode 面试题06. 从尾到头打印链表【剑指Offer
2020-03-17 本文已影响0人
Wonz
LeetCode 面试题06. 从尾到头打印链表【剑指Offer】【Easy】【Python】【链表】
问题
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
思路
解法一
reverse函数
时间复杂度: O(n),n为 head 链表长度。
空间复杂度: O(n),n为 head 链表长度。
Python3代码
# 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]:
# solution one: reverse
res = []
while head:
res.append(head.val)
head = head.next
res.reverse()
return res
解法二
栈
时间复杂度: O(n),n为 head 链表长度。
空间复杂度: O(n),n为 head 链表长度。
Python3代码
# 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]:
# solution two: 栈
stack = []
while head: # push
stack.append(head.val)
head = head.next
res = []
while stack: # pop
res.append(stack.pop())
return res
解法三
递归
Python3代码
# 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]:
# solution three: 递归
return self.reversePrint(head.next) + [head.val] if head else []