题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
链表的python表示
class ListNode:
def __init__(self, x):#定义链表
self.val = x
self.next = None
def printChain(node):#输出链表
while node:
print(node.val)
node=node.next
if __name__=='__main__':
#生成形如1->2->3->None的链表
l1=ListNode(1)
l2=ListNode(2)
l3=ListNode(3)
l1.next=l2
l2.next=l3
printChain(l1)
方法一:递归法
# -*- coding:utf-8 -*-
# class ListNode: #定义链表这种节点
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
if listNode is None:
return [ ]
else:
return self.printListFromTailToHead(listNode.next)+[listNode.val]#利用递归的方法
方法二:利用insert 函数
insert函数的用法:insert(position,value),将value插到位置position上
# -*- coding:utf-8 -*-
# class ListNode: #定义链表这种节点
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
l=[]
head=listNode
while head:
l.insert(0,head.val)
head=head.next
return l
通过循环,令指针不断地指向链表中的下一项,与此同时,利用insert函数,使得指针指着的数据不断地插入到列表l的第一个位置。
方法三:利用append函数和列表的切片性质
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
l=[]
head=listNode
while head:
l.append(head.val)
head=head.next
return l[::-1]#将列表从头到尾返回。