原题链接
1.使用栈
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
temp=[]
result=[]
while listNode:
temp.append(listNode.val)#进栈
listNode=listNode.next
while temp:
result.append(temp.pop())#出栈
return result
2.反转链表后输出
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
if not listNode:
return []
res=[]
pre=None
head=listNode
while head:#反转链表,双指针
listNode=listNode.next
head.next=pre
pre=head
head=listNode
while pre:#
res.append(pre.val)
pre=pre.next
return res
3.存入列表后反转列表
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
if not listNode:
return []
res=[]
while listNode:
res.append(listNode.val)
listNode=listNode.next
return res[::-1]
python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
参考链接
a[-1])###取最后一个元素
a[:-1] ### 除了最后一个取全部
a[::-1] ### 取从后向前(相反)的元素
a[2::-1] ### 取从下标为2的元素翻转读取
4.递归方法
递归本质上可以理解为一个栈结构,当链表比较长的时候,会导致函数调用的层级很深,很可能导致函数调用栈的溢出,所以总体来说还是栈的基于循环实现的思路鲁棒性更好一些。
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def __init__(self):
self.res = []
def printListFromTailToHead(self, listNode):
if not listNode:#结束循环条件,即listNode为空时
return self.res
res = self.printListFromTailToHead(listNode.next)
res.append(listNode.val)
return res