# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param listNode ListNode类
# @return int整型一维数组
#
class Solution:
def printListFromTailToHead(self , listNode: ListNode) -> List[int]:
# write code here
##方法一:使用栈
# if not listNode:
# return []
# tmp=[] #入栈数据
# result=[] #出栈得到的最后结果
# #入栈保存各节点内容
# while(listNode): #listNode是一个链表的头节点
# tmp.append(listNode.val) ##入栈,list.append,list无stack
# listNode=listNode.next
# #出栈弹出各节点内容,即为对原链表反转后的结果,最先弹出的为链表的最后一个节点
# while(tmp):
# result.append(tmp.pop()) ##出栈,list.pop
# return result
##方法二:从头到尾遍历链表,然后逆序输出
# if not listNode:
# return []
# result=[]
# while listNode:
# result.append(listNode.val)
# listNode=listNode.next
# #反转list的方法
# #1:
# #return result[::-1] #其中[::-1]代表从后向前取值,每次步进值为1
# #2:
# return list(reversed(result))
# #reversed(result)返回的是迭代器,所以前面加个list转换为list
##方法三:使用递归,一层层进,从最内向外出
##(当链表比较长的时候,会导致函数调用的层级很深,很可能导致函数调用栈的溢出,所以总体来说还是栈的基于循环实现的思路鲁棒性更好一些)
if not listNode:
return []
result=[]
def solutions(Node):
if Node:
if Node.next:
solutions(Node.next)
result.append(Node.val)
# ##如果Node是最后一个节点,则Node.next为空,solutions(Node.next)跳出,将Node.val加入result中
# ##然后sulutions(Node.next)跳出,将Node.val加入result中,这里的Node.next是最后一个节点,Node是倒数第二个节点
solutions(listNode)
return result