python程式設計中實現linkedlist 連結串列)報錯是因為什麼,怎麼解決

時間 2022-03-08 13:55:22

1樓:其實我是一頭豬

樓主你好!

看你的**存在很多問題,一個個來說明

1)首先你**的報錯源於你想用list來你的slinkedlist類,在python中,除非內建的可迭代物件外,其他都需要實現__iter__()函式,才能用list來進行。注意:判斷一個物件是否可迭代,請使用isinstance(obj, iterable)來判斷obj是不是可以迭代,iterable需要從collections中匯入

2)插入的方法存在嚴重問題,按樓主的方法插入的話,因為頭節點始終在變,所以當你需要遍歷連結串列的時候就會找不到頭節點;

3)pop的方法實現也有問題,因為是單向鏈,所以無法從末節點開始刪除,只能刪除頭節點

4)top方法的意圖未知

其他:下面列舉了一下我修改後的方案,做了一些錦上添花的操作,每個基本操作都會返回連結串列物件,這樣就可以使用鏈式操作來寫**;迭代函式使用yield來實現,避免時佔用不必要的記憶體。

另:我的時直接取連結串列中各個節點的元素,加了一些關鍵註釋在**中;

# -*- coding: utf-8 -*-

class node:

def __init__(self):

'''elm:節點元素

nxt:下個節點指標

'''self.elm, self.nxt = none, none

class slinkedlist:

def __init__(self):

'''head: 連結串列頭

end_point: 連結串列尾

'''self.head      = none

self.end_point = none

def push(self, x):

p = node()

p.elm = x

if self.head is none:

self.head      = p

self.end_point = p

return self

self.end_point.nxt = p

self.end_point     = p

return self

def pop(self):

'''因為實現的是一個單連結串列,所以只能從頭開始刪除節點'''

if self.head.nxt is none:

return

self.head = self.head.nxt

return self

def __iter__(self):

temp_node = self.head

while temp_node is not none:

yield temp_node.elm

temp_node = temp_node.nxt

if __name__ == '__main__':

'''增加1,2,5三個元素,並刪除一個頭節點'''

mylinklist = slinkedlist().push(1).push(2).push(5).pop()

print(list(mylinklist))

其實python這個語言使用連結串列有些畫蛇添足,但是如果拿來當作需求練手也無妨。

望採納,謝謝!

2樓:匿名使用者

你得實現__iter__才能使用list直接列出元素。

為 linkedlist 新增類似 python 自帶列表實現 list 中的 append, pop, insert 方法

3樓:匿名使用者

寫了個insert

def insert(self,index,item):

previous=none

current=self.head

count=0

temp=node(item)

if index>self.size():

print "out index"

elif index==0:

temp.setnext(current)self.head=temp

else:

while index:

index-=1

previous=current

current=current.getnext()previous.setnext(temp)temp.setnext(current)

python中如何用連結串列實現佇列?

4樓:神

python中的佇列是列表嗎?

如果有問題, 希望能一起研究一下?

看下網名吧, 樓主

python程式設計題,Python程式設計題

我用的是python3.6.x 剛才一個題和這個一樣是你問的嗎? def same first name name1,name2 if name1 is none or name2 is none print name1 or name2 is none elif type name1 type o...

用python程式設計求1 ,用python程式設計求1 1 2 1 3 1 4 1 5 累加和,資料項小於0 1時停止

樹不開叉 def summa summ 0 for i in range 1,100 fl 1.0 i if fl 0.1 summ fl else print the sum is summreturn sum summa 注意縮排 def iteritem limit x 1.while 1 v...

python中如何使用遞迴實現這個功能

紫薇參星 按照你的要求用遞迴的方法得到你要的資料的python程式如下 python函式遞迴的實現 只要獲得所有點即可,x1為x軸起點,x2為x軸終點,gao為縱軸長度,i為切分次數.x1 0 x2 10 gao 8 f 0,gao,x1,x2 f i 0,gao,x1,x2 t double x1...