Leetcode Link: 剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode) (leetcode-cn.com)

题目

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

解法一

思路:最基本的方法。先全都取出来,在反着打印出来。(辅助栈法)

题解:时间,额外空间

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        # 数组反转方法求解
        # 等同于依靠栈求解
        que = []
        while(head):
            que.append(head.val)
            head = head.next
        return que[::-1]

解法二

思路:递归

题解:时间, 额外空间

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        self.nums = []
        self.inRecur(head)
        return self.nums
    
    def inRecur(self, head):
        # 注意这里是不能用self.head = self.head.next
        # 因为那样指针的位置回不来了
        if head == None:
            return # 递归终止条件
        self.inRecur(head.next)
        self.nums.append(head.val)

启发和联系

Python 中对List进行逆序的三种方法

  1. list.reverse()
  2. list[: :-1]
  3. reversed(),inline method, 会将列表逆序的结果存储到迭代器里面,不改变原来的列表,也不创建副本,只会多出迭代器对象所占的空间,相对来说也比较高效。 其返回值是一个迭代器,你可以将其理解为一个指针,指向原来的列表。