题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
栈
可以使用栈结构,从头到尾遍历链表放入栈中,根据栈先入后出的性质,可以实现将链表从尾到头返回。在python中可以用列表结构来实现栈的功能。
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
result = []
while listNode:
result.append(listNode.val)
listNode = listNode.next
return result[::-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 printListFromTailToHead(self, listNode):
# write code here
if not listNode:
return []
temp = []
result = []
while listNode:
temp.append(listNode.val) # 进栈
listNode = listNode.next
while temp:
result.append(temp.pop()) # 出栈
return result
递归
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
result = []
def solution(node):
if node:
solution(node.next)
result.append(node.val)
solution(listNode)
return result
总结: 链表的特点
长度不固定,可以任意增删,插入或删除节点时,只需改变相应节点的指针指向即可,无需大量移动元素。
存储空间不连续,数据元素之间使用指针相连,每个数据元素只能访问周围的一个元素(根据单链表还是双链表有所不同),所以易于扩展。
存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针)。
要访问特定元素,链表必须从链表头开始,依次向后查找,平均需要0(n)的时间,存取速度慢。