题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路1:
可以使用栈结构,从头到尾遍历链表放入栈中,根据栈先入后出的性质,可以实现将链表从尾到头返回。在python中可以用列表结构来实现栈的功能。
def printListFromTailToHead(self, listNode):
# write code here
arrayList=[]
while listNode:
arrayList.append(listNode.val)
listNode=listNode.next
return arrayList[::-1]
当然除了上面的代码
return arrayList[::-1]之外,也可使用列表的pop()函数,实现从尾部输出。
def printListFromTailToHead(self, listNode):
# write code here
arrayList=[]
while listNode:
arrayList.append(listNode.val)
listNode=listNode.next
array2=[]
while arrayList:
array2.append(arrayList.pop())
return array2
思路二:既然想到了栈,其实递归本质上就是一个栈结构,所以也可以使用递归来实现。
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def __init__(self):
self.arrayList=[]
def printListFromTailToHead(self, listNode):
# write code here
if listNode:
if listNode.next:
self.printListFromTailToHead(listNode.next)
self.arrayList.append(listNode.val)
return self.arrayList
(当链表比较长的时候,会导致函数调用的层级很深,很可能导致函数调用栈的溢出,所以总体来说还是栈的基于循环实现的思路鲁棒性更好一些)