无法删除链表中的第一个节点

时间:2012-10-26 16:34:38

标签: python oop linked-list

我正在尝试在python中创建一个链表类(我知道这是无意义的,但这是一个学习练习),如果我尝试删除第一个元素,我编写的删除节点的方法不起作用链表。如果要删除的节点是链表中的任何其他位置,则该方法可以正常工作。有人能给我一些关于我哪里出错的见解吗?

到目前为止,这是我的代码:

class Node:

    def __init__(self, data=None, next=None):
        self.data = data
        self.next = next

    def __repr__(self):
      return repr(self.data)

    def printNodes(self):
        while self:
            print self.data
            self = self.next

    def removeNode(self, datum):
        """removes node from linked list"""
        if self.data == datum:
            return self.next
        while self.next:
            if self.next.data == datum:
                self.next = self.next.next
                return self
            self = self.next

2 个答案:

答案 0 :(得分:1)

修改removeNode,使其始终返回链表的头部,然后将结果分配回头节点。像这样:

def removeNode(self, datum):
    """removes node from linked list and returns head node"""
    head = self
    curr_node = self
    if curr_node.data == datum:
        head = curr_node.next
    else:
        while curr_node.next:
            if curr_node.next.data == datum:
                curr_node.next = self.next.next
                break
            curr_node = curr_node.next
    return head

或者,如果您想避免必须将removeNode的结果分配回头:

def removeNode(self, datum):
    """removes node from linked list"""
    curr_node = self
    if curr_node.data == datum:
        # steals the the data from the second node
        curr_node.data = curr_node.next.data
        curr_node.next = curr_node.next.next
    else:
        while curr_node.next:
            if curr_node.next.data == datum:
                curr_node.next = curr_node.next.next
                break
            curr_node = curr_node.next

注意:我已将self分配给curr_node,因为修改self感觉不对。

答案 1 :(得分:0)

如代码所示,removeNode方法返回链接列表的新第一个节点。您应该使用head = head.removeNode(1)而不是只调用方法。