[英]Deleting a specific node from a linked list - python
作为练习,我试图创建自己的链接列表。 我创建了一个节点类和一个链表类。 我已经能够创建一个构造函数和一个节点加法器方法。 我的删除方法有很多问题。 这是我的代码优先:
class Node:
def __init__(self,value,next=None):
self.value = value
self.next = next
def getNext(self):
return self.next
def getValue(self):
return self.value
class LinkedList:
def __init__(self,node):
self.node = node
def __str__(self):
node = self.node
s = "[Node " + str(node.getValue())
if node.getNext() is None:
return s + "]"
while node.next is not None:
s += ", Node " + str(node.next.value)
node = node.next
return s + "]"
def add(self,newNode):
node = self.node
while node.next is not None:
node = node.next
node.next = newNode
def delete(self,value):
head = self.node
if head.getValue() == value:
return LinkedList(head.next)
temp = head
while temp.next is not None:
if temp.next.getValue() == value:
temp = temp.next.next
temp.next = None
return LinkedList(head)
temp = temp.next
return "Sorry node is not here!"
我的删除功能为您提供了列表中某个节点可能具有或可能不具有的特定值,然后删除该节点并返回列表,除非该节点不存在,则它将返回一条消息。 我遇到的情况是,您只是通过返回一个构造函数来删除头,尽管老实说,我不是创建链表的新实例的忠实拥护者。 尽管从其他任何地方删除节点都行不通,但是我通过打印出列表来对其进行测试,并且对链表没有任何更改。 任何帮助将不胜感激!
这应该起作用,而不是:
temp = temp.next.next
做:
temp.next = temp.next.next
return self
不知道您是否需要一般反馈,但这是一些想法和我的实现。
我认为,如果用户不需要使用Node类,则使用起来更容易。 因此,构造函数/添加/删除可以直接接受该值。 无论如何,我认为最好将Node类嵌套在LinkedList中以提供上下文。
您说过要避免创建LinkedList的新实例,因此我无需编写它。
delete函数仅删除该值的第一次出现(请注意,可以有多个具有相同值的节点)
您的删除功能返回一条消息有点不寻常。 我认为最好将其放在异常中,如果您想要一条错误消息,或者这是唯一的预期错误,则可能只返回True或False。
我还没有编写迭代器,显然需要这样做。
class LinkedList :
class Node:
def __init__(self, value) :
self.__value = value
self.next = None
def getValue(self) :
return self.__value
def __init__(self, value) :
self.__node = self.Node(value)
def __str__(self) :
if self.__node is None :
return '[empty]'
node = self.__node
s = "[Node " + str(node.getValue())
if node.next is None:
return s + "]"
while node.next is not None:
s += ", Node " + str(node.next.getValue())
node = node.next
return s + "]"
def add(self, value):
if self.__node is None :
self.__node = self.Node(value)
return
node = self.__node
while node.next is not None :
node = node.next
node.next = self.Node(value)
def delete(self, value) :
if self.__node is None :
return False # or maybe raise
node = self.__node
if node.getValue() == value :
if node.next is not None :
self.__node = node.next
else :
self.__node = None
return True
while node.next is not None :
if node.next.getValue() == value :
newNext = node.next.next
if newNext is not None :
node.next = newNext
else :
node.next = None
return True
return False # or maybe raise
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.