删除链接列表中间的节点,仅允许访问该节点。 - Python

时间:2017-03-13 18:18:28

标签: python

我正在尝试删除中间节点,但是当我调用该函数并尝试在给定节点之后获取第二个节点时,它似乎是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)

2 个答案:

答案 0 :(得分:0)

您实际上并未将mid节点插入链接列表;相反,您将一个全新的节点插入到具有相同数据值的列表中。您通过mid执行的任何操作都不会对您的列表产生任何影响,因为它与列表没有任何关联。

答案 1 :(得分:0)

立即开始,看起来您正在从中间节点mid添加数据,而不是将节点本身添加到头部位置。当您尝试删除mid时,您需要在链接列表中找到类似mid的节点,因为它不是完全相同的节点。

或者,您可以选择添加名为Node的{​​{1}},方法是创建一个新的插入函数,该函数使用mid代替Node

即,data