从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例1
1
2
| **输入** head = [1,3,2]
**输出** [2,3,1]
|
限制
0 <= 链表长度 <= 10000
解法
递归
1
2
3
4
5
6
7
8
| # 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]:
return self.reversePrint(head.next)+[head.val] if head else []
|
解析
- 终止条件 head 为none 越过了链尾节点 否则返回空列表
- 递推操作:访问下一节点head.next
- 回溯阶段:
复杂度分析
- 时间复杂度O(N): 遍历链表,递归 N 次。
- 空间复杂度O(N):系统递归需要使用 O(N)O(N) 的栈空间。
辅助栈
先入后出的可以用栈来实现
- 入栈:遍历链表 入栈
- 出栈:节点值出栈 存储数组返回
1
2
3
4
5
6
7
8
9
10
11
12
| # 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]
|