题目
输出一个链表的头节点,按链表从尾到头的程序返回每个节点的值(用数组返回)。
示例1
输出:
{1,2,3}
复制
返回值:
[3,2,1]
复制
示例2
输出:
{67,0,24,58}
复制
返回值:
[58,24,0,67]
思路
第一反馈这不就是反转链表吗,但认真审题后,发现和翻转链表并不一样。
题目要求的是,返回链表翻转后的每个节点的值。
如果用翻转链表的思路,要先翻转链表,再遍历翻转链表的每个节点。这么做无论空间还是工夫复杂度都不够简洁。
更优雅的思路是,只遍历一次原链表,将每个节点的值存在栈中,最初再将栈的元素一一pop进去存在一个数组中,或者利用python中的切片间接返回栈的逆序,利用栈的先进后出的个性,实现翻转。
def printListFromTailToHead(self , listNode: ListNode) -> List[int]:
curNode = listNode
stack = []
while curNode:
stack.append(ptr.val)
curNode=curNode.next
return stack[::-1]
发表回复