题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路
1. 从头开始,每经过一个节点就把它的值保存下来,最后反转
# -*- 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
res = []
while listNode:
res.append(listNode.val)
listNode = listNode.next
return res[::-1]
2. 遍历链表,把链表值插入到0位置
# -*- 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
res = []
while listNode:
res.insert(0, listNode.val)
listNode = listNode.next
return res
总结
第一种的方法复杂度更低,因为append的方法复杂的是O(1),翻转是O(n)。第二种方法的insert复杂度是O(n),一共有n个元素的化,第一种的复杂度是O(n),第二种是O(n*n).