2015-02-23 54 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