输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
开始前的意外
经过初步尝试后,发现输入的head竟然是
ListNode{val: 1, next: ListNode{val: 3, next: ListNode{val: 2, next: None}}}
而ListNode并不是Python自带的数据类型,所以非常奇怪。直到发现了代码原始模板中被注释的几行:
# 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]:
想来这应该是约定俗称的了,下次要注意。
解题思路
首先,根据初始代码,可知head.val能够返回头节点的值;
head.next则能够访问下一个节点。
因此,通过构建辅助栈,将所有节点的value按照从前到后的顺序放入到辅助栈中;
之后,再利用列表倒置[::-1]的方法先入后出倒置返回即可。
代码
# 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]:
inverse_head = []
while(head):
inverse_head.append(head.val) # 访问值
head = head.next # 下一个节点
return inverse_head[::-1] # 倒置
注:
1. [::-1]求列表倒置的原因参见:https://blog.csdn.net/qazwsxrx/article/details/106909177
总结:
做题前注意看辅助函数。