リンクリストで同じ値のすべてのインスタンスを削除することに多くの問題があります。問題はremove関数のself.head部分と関係があることを理解しています。指定された値のすべてのインスタンスを削除するリンクリスト
class Node:
def __init__(self,data):
self.data = data
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
class UnorderedList:
def __init__(self):
self.head = None
#Checks to see if the list is empty
def isEmpty(self):
return self.head == None
#Adds the item at the beginning of the list
def add(self,item):
temp = Node(item)
temp.setNext(self.head)
self.head = temp
#Prints the Unordered List
def __str__(self):
result = "["
current = self.head
if current != None:
result += str(current.data)
current = current.next
while current:
result += ", " + str(current.data)
current = current.next
result += "]"
return result
# Removes a specified item from the list
def remove(self, item):
if self.head == None:
return 'Cannot remove from an empty list'
current = self.head
while current != None:
iterator = current
while iterator != None:
prev = iterator
iterator = iterator.getNext()
if iterator is None:
break
if iterator.getData() == item:
Next = iterator.getNext()
prev.setNext(Next)
current = current.getNext()
mylist = UnorderedList()
for i in range(50):
mylist.add(2)
mylist.remove(2)
print(mylist)
結果:[2、2、2、2、2]
期待される結果:[]
ええ、私は例外をもっともっと上げる提案が好きです。私はなぜ3番目のステートメント(self.headがNoneでない場合)が無限に実行されるのかについて迷っています。 mylist.add(2) mylist.add(31) mylist.add(77) mylist.add(17) マイリスト:この入力マイリスト下インスタンス= UnorderedList() 範囲(50)内のiについて.add(93) mylist.add(26) mylist.add(31) mylist.add(54) プリント(マイリスト) mylist.remove(2) プリント(マイリスト) – skryt
ああ、それがため、永久に実行され私は愚かで、「電流」を後のノードに進めるためのコードを一切取りませんでした。あなたはただアイテムを削除していないときにそれが起こることを望みます。うまくいけば永遠に動かないコードで編集しました。 – Blckknght