我正在尝试删除中间节点,但是当我调用该函数并尝试在给定节点之后获取第二个节点时,它似乎是None。以下是我的代码,请帮我纠正。
class Node:
# Constructor to initialize the node object
def __init__(self, data):
self.data= data
self.next= None
class LinkedList():
# Function to initialize head
def __init__(self):
self.head = None
# Function to insert a new node at the beginning
def insert(self, data):
node = Node(data)
node.next=self.head
self.head = node
# Function to print elements of the linked list
def printlist(self):
current = self.head
while current:
print current.data
current = current.next
def deleteMiddle(self, node):
second = node.next
print second.data
if node is None:
return
node.data = second.data
node.next = second.next
llist = LinkedList()
llist.insert(10)
llist.insert(15)
mid = Node(20)
llist.insert(mid.data)
llist.insert(16)
llist.insert(17)
llist.insert(19)
print "Before deleting middle or any node"
llist.printlist()
print "After deleting middle or any node"
llist.deleteMiddle(mid)
llist.printlist()
更新1 :我添加了以下更改,并且工作正常。但是想知道,如果它是正确的并且可以将(insert和addNode函数)组合成一个函数。此外,我想了解编写此代码的更好方法,因为可能存在一种情况,我想删除任何节点,并且只能访问该节点。使用我的代码,我正在定义节点然后删除它,但我仍然认为应该有比我的代码更好的方法。
def addNode(self, node):
node.next = self.head
self.head = node
llist.addNode(mid)
答案 0 :(得分:0)
您实际上并未将mid
节点插入链接列表;相反,您将一个全新的节点插入到具有相同数据值的列表中。您通过mid
执行的任何操作都不会对您的列表产生任何影响,因为它与列表没有任何关联。
答案 1 :(得分:0)
立即开始,看起来您正在从中间节点mid
添加数据,而不是将节点本身添加到头部位置。当您尝试删除mid
时,您需要在链接列表中找到类似mid
的节点,因为它不是完全相同的节点。
或者,您可以选择添加名为Node
的{{1}},方法是创建一个新的插入函数,该函数使用mid
代替Node
。
即,data