劍指offer第三題 從尾到頭列印連結串列
阿新 • • 發佈:2019-01-06
題目描述
輸入一個連結串列,按連結串列值從尾到頭的順序返回一個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).