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...