1. 程式人生 > >劍指offer第三題 從尾到頭列印連結串列

劍指offer第三題 從尾到頭列印連結串列

題目描述

輸入一個連結串列,按連結串列值從尾到頭的順序返回一個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).