在Python的LinkedList中将新元素插入为头部

2024-03-28 14:50:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Linkedlist的开头添加一个元素,但是添加了None,而不是实际的元素

class Node:
    #initialize the head node to none if not provided and set the next node to none
    def __init__(self,data=None):
        self.data = data
        self.next = None

class Linkedlist:
    def __init__(self):
        self.head = Node()


    def append(self,data):
        #creating the node with the data parameter
        new_node = Node(data)
        current_node = self.head
        while current_node.next is not None:
            current_node = current_node.next
        #when we have reached the end of list
        current_node.next = new_node


    def display(self):
        #container for the nodes
        node_elements = []
        current_node = self.head

        while current_node.next is not None:
            current_node = current_node.next
            node_elements.append(current_node.data)
        print(node_elements)

    #Here is where there is the issue
    def insert_as_first_element(self,data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

Tags: theselfnonenodenewdataisdef
3条回答

问题出在您的display函数中,您需要切换提取数据和移动到下一个节点的顺序。否则,您将无法到达您在列表中输入的第一个节点。在

    while current_node.next is not None:
       node_elements.append(current_node.data)
       current_node = current_node.next

您的问题不在于插入本身,它在更早的时候就开始于LinkedList底部的空(None)节点。然后,当您在列表的开头插入一个元素时,该节点将向下推送结构,使其出现在您的display()调用中(假设{}现在是这个空的节点)。在

如果您想在链表的根目录中保留一个空节点,一个简单的解决方法是将它留在那里,并与其子节点一起操作:

def insert_as_first_element(self, data):
    new_node = Node(data)
    new_node.next = self.head.next
    self.head.next = new_node

你的insert方法似乎很好。问题似乎是将self.head初始化为空的Node(),但从未更新该节点的data。将repr方法添加到Node作为

def __repr__(self):
    return "(%r, %r)" % (self.data, self.next)

我们看到,在添加或插入range(10)中的数字后,结果如下所示:

^{pr2}$

相反,您应该将self.head初始化为None,并向append添加一个一致的检查:

def __init__(self):
    self.head = None

def append(self,data):
    if self.head is None:
        self.head = Node(data)
    else:
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = Node(data)

结果如下:

(0, (1, (2, (3, (4, (5, (6, (7, (8, (9, None))))))))))
(9, (8, (7, (6, (5, (4, (3, (2, (1, (0, None))))))))))

您还必须调整您的display方法,因为它跳过列表中的第一个元素,这可能就是您没有注意到append的错误的原因。在

def display(self):
    node_elements = []
    cur = self.head
    while cur is not None:
        node_elements.append(cur.data)
        cur = cur.next
    print(node_elements)

相关问题 更多 >