剑指offer--从头到尾打印链表(python)
从尾到头打印链表
http://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
题目描述:
输入一个链表,按链表从尾到头的顺序返回一个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
(当链表比较长的时候,会导致函数调用的层级很深,很可能导致函数调用栈的溢出,所以总体来说还是栈的基于循环实现的思路鲁棒性更好一些)