なぜ次のことがうまくいかないのか疑問に思っています。
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
def remove(self, value):
if self is None:
return False
if self.data == value:
if self.next:
self.data = self.next.data
self.next = self.next.next
else:
del self
else:
self.next.remove(value)
node = Node(4)
node.append(Node(3))
node.remove(3)
print node.next.data
#prints 3
del
リンクされたリストから要素を削除しません。delete()
ターゲット要素の親へのポインターを持つように、関数を変更する必要がありました。
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
def remove(self, value):
if self is None:
return False
if self.data == value:
if self.next:
self.data = self.next.data
self.next = self.next.next
else:
del self
else:
current = self
while current.next:
if current.next.data == value:
if current.next.next:
current.next = current.next.next
else:
current.next = None
コンソールから、
node = Node(4)
current = node
del current #node is not deleted because I am only deleting the pointer
del node #node is deleted
これは私には論理的に思えます。ただし、最初のコード ブロックが期待どおりに機能しない理由はわかりません。