题目

输出一个链表的头节点,按链表从尾到头的程序返回每个节点的值(用数组返回)。

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