[英]Doubly linked list with Python
我正在尝试在 python 中实现双向链表,但无法正确实现删除。
def deleteFromBeginning(self):
if self.listLength()==0:
print("Can't delete from an empty list")
else:
self.head = self.head.next
def deleteFromEnd(self):
if self.listLength() ==0:
print("Can't delete from an empty list")
else:
current=self.head
while(current.next!=None):
current.prev = current
current = current.next
current.prev.next = None
current.prev = None
def deleteFromPosition(self,pos):
if pos> self.listLength() or pos<0:
ValueError("Enter a valid position")
elif pos==0:
deleteFromBeginning()
elif pos == self.listLength():
deleteFromEnd()
else:
if self.listLength()==0:
print("Can't delete from an empty list")
else:
current=self.head
count = 1
while(current.next!=None and count<pos):
current = current.next
count = count+1
current.prev.setNext(current.next)
current.next.setPrev(current.prev)
current.setPrev(None)
current.setNext(None)
def deleteWithData(self,data):
if self.listLength()==0:
ValueError("Can't delete from an empty list")
else:
current = self.head
while current.next!=None:
if current.data == data:
current.prev.next = current.next
current.next.prev = current.prev
return
else:
current = current.next
print("The value provided is not present")
我会做的一个轻微的重构是移动你的
if self.listLength()==0:
print("Can't delete from an empty list")
检查到最顶部,而不是在 else 内部。 这应该是您首先进行的检查之一。
除此之外,您可以尝试跟踪前一个节点:
while(current.next!=None and count<pos):
temp = current
current = current.next
count = count+1
temp.setNext(current.next)
current.next.setPrev(temp)
这应该通过将前一个节点重新链接到下一个节点来删除 x 位置的节点。
还没有测试过,让我知道它是怎么回事!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.