2015-02-23 58 views
0

我是python的新手,我正在試着模擬鏈表如何工作。我有以下代碼:在python中使用鏈接列表的屬性錯誤

def mystery(x): 
    a , b = x , x.next.next 
    while b.next != None: 
    a.next.next = b.next 
    b.next = a.next 
    a.next = b 
    a = b 
    b = b.next.next 

但是當過我給它的列表的 'x',其爲x = [ '1', '2', '3', '4', '5'],我得到以下錯誤:

File "D:\workspace33\Quizes\src\tests.py", line 3, in mystery 
a , b = x , x.next.next 
AttributeError: 'list' object has no attribute 'next' 

我試圖模擬/ visulaize程序上Online Python Tutor 但我一直得到了同樣的錯誤。任何人都可以讓我知道我做錯了什麼,或幫助我瞭解這個過程。

+0

爲什麼你認爲列表有'next'屬性? (他們沒有) – 2015-02-23 18:43:19

+0

Python列表,比如你的'x = ['1','2','3','4','5']'不是鏈表。 – ruakh 2015-02-23 18:45:43

+0

@ TimCastelijns-謝謝,我將如何去使用該程序? – BoJaNgLeS 2015-02-23 18:47:02

回答

1

如果.next被替換爲[1],則可以使用python列表實現鏈接列表。這是您的程序如此轉換的例子。

def mystery(x): 
    a , b = x, x[1][1] 
    while b[1] != None: 
    a[1][1] = b[1] 
    b[1] = a[1] 
    a[1] = b 
    a = b 
    b = b[1][1] 
    return a, b 

ll = [0, [1, [2, [3, None]]]] 
print(mystery(ll)) 
# ([2, [1, [3, None]]], [3, None]) 

如果你願意,你可以通過這個程序在空閒從編輯器窗口中運行它,然後再打開調試器(在Shell窗口)步驟。到達打印行時,單擊[over]而不是[step](或禁用打印)。

+0

@ TerryJanReedy-這個程序的功能與原來的完全相同嗎? – BoJaNgLeS 2015-02-24 07:13:11

+0

就鏈接訪問和操作方面而言,是的。我在神祕功能中做了指示的查找/替換 - 全部。如果你寫一個LL類並創建一個等價的輸入,你應該得到一個等效的輸出。 – 2015-02-24 23:02:23