作为练习,我试图创建自己的链接列表。我已经创建了一个节点类和一个链表类。我已经能够创建一个构造函数和一个节点加法器方法。不过,我的删除方法有很多问题。以下是我的代码:
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!"
我的delete函数给它一个特定的值,列表中的某个节点可能有,也可能没有,然后删除该节点并返回列表,除非该节点不存在,否则它将返回一条消息。我有一个例子,你只是通过返回一个构造函数来删除头,尽管说实话,我不太喜欢创建链表的新实例。不过,从其他任何地方删除节点都不起作用,因为我通过打印列表对其进行了测试,但它不会显示对链接列表的任何更改。任何帮助都将不胜感激!
这应该有效,而不是:
做:
不知道你是否需要一般性的反馈,但这里有一些想法和我的实现。
我认为,如果用户不需要使用Node类,那么它更容易使用。所以构造函数/add/delete可以直接接受这个值。无论如何,我认为让Node类嵌套在LinkedList中以提供上下文更好。
你说你想避免创建一个新的LinkedList实例,所以我写了它而不需要它。
delete函数只删除值的第一个匹配项(注意,可以有多个具有相同值的节点)
delete函数返回消息有点不寻常。如果你想要一条错误消息,或者如果这是唯一期望的错误,那么最好把它放在一个异常中,可能只返回True或False。
我还没有写一个迭代器,显然这是需要的。
相关问题 更多 >
编程相关推荐