从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例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]