看看妳的代碼。問題很多。逐壹解釋。
1)首先,代碼的錯誤源於您想用List擴展SLinkedList類。在python中,除非有內置的叠代對象,否則所有其他對象都需要實現__iter__()函數來擴展list。註意:判斷對象是否叠代請使用is instance(obj,Iterable)判斷obj是否叠代,Iterable需要從集合中導入。
2)插入方法存在嚴重問題。如果按照樓主的方法插入,因為頭節點壹直在變,所以需要遍歷鏈表時不會找到頭節點;
3)3)pop方法的實現也存在問題,因為它是單向鏈,所以不能從結束節點刪除,只能刪除頭節點。
4)top方法的意圖未知。
其他:
以下是我修改方案的清單,我做了壹些錦上添花的操作。每個基本操作都將返回鏈表對象,以便您可以使用鏈操作來編寫代碼。叠代函數由yield實現,以避免擴展時占用不必要的內存。
此外:我的擴展直接獲取鏈表中每個節點的元素,並在代碼中添加壹些關鍵註釋;
#?-*-?編碼:?utf-8?-*-
上課?節點:
def?_ _ init _ _(self):
'''
Elm:節點元素
Nxt:下壹節點指針
'''
self.elm?self.nxt?=?沒有?沒有人
上課?SLinkedList:
def?_ _ init _ _(self):
'''
頭:?鏈表頭
end_point:鏈表尾部
'''
self.head=?沒有人
self.end_point?=?沒有人
def?推(自己,?x):
p?=?節點()
榆樹皮。=?x
如果?自我意識?是嗎?無:
self.head=?p
self.end_point?=?p
回歸?自己
self.end_point.nxt?=?p
self.end_point?=?p
回歸?自己
def?波普(自己):
‘‘因為實現了單個鏈表,所以只能從頭開始刪除節點‘‘‘。
如果?self.head.nxt?是嗎?無:
返回
自我意識?=?self.head.nxt
回歸?自己
def?_ _ ITER _ _(self):
臨時節點?=?自我頭像
什麽時候?臨時節點?是嗎?不是嗎?無:
產量?temp_node .榆樹
臨時節點?=?臨時節點。nxt
如果?__name__?==?_ _ main _ _:
‘‘添加1,2,5的三個元素,並刪除壹個頭節點‘‘‘
我的鏈接列表?=?SLinkedList()。推(1)。按(2)。按(5)。流行音樂()
print(list(my link list))事實上,在python中使用鏈表有些多余,但如果將其用作需求實踐也無妨。
望采納,謝謝!