📌  相关文章
📜  数据结构示例-双向链表的末尾插入新节点(1)

📅  最后修改于: 2023-12-03 14:54:57.509000             🧑  作者: Mango

双向链表的末尾插入新节点

双向链表(doubly linked list)是一个链表的形式,它的每个节点除了保存下一个节点的地址外,还保存前一个节点的地址。

在双向链表中,我们可以从头节点开始向后遍历,也可以从尾节点开始向前遍历。这个特性让一些操作变得非常方便,比如在末尾插入新节点。

下面是一个Python示例程序,演示如何在双向链表的末尾插入新节点:

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

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

    def append(self, data):
        """在链表末尾插入新节点"""
        new_node = Node(data)

        if not self.head:
            # 如果链表为空,则新节点既是头节点,也是尾节点
            self.head = new_node
            self.tail = new_node
        else:
            # 否则将新节点添加在尾节点之后
            self.tail.next = new_node
            new_node.prev = self.tail
            self.tail = new_node

# 示例程序,验证在双向链表中插入新节点
lst = DoublyLinkedList()
lst.append(1)
lst.append(2)
lst.append(3)

# 验证链表的末尾是否正确
assert lst.tail.data == 3
assert lst.tail.prev.data == 2
assert lst.tail.prev.prev.data == 1

# 遍历链表,打印每个节点的值
node = lst.head
while node:
    print(node.data)
    node = node.next

上面的程序中,首先我们定义了一个Node类,表示链表中的一个节点。这个类包含了节点中保存的数据、下一个节点的地址以及上一个节点的地址。接着定义了一个DoublyLinkedList类,表示双向链表。

append函数用于在链表末尾插入新节点。如果链表为空,则将新节点设置为头节点和尾节点;否则,将新节点添加在尾节点之后,然后更新尾节点的地址。这里需要注意的是,在插入新节点之前,我们需要将新节点的prev属性设置为原尾节点。

在程序的后半部分,我们创建了一个DoublyLinkedList对象,并向其中插入了三个节点。然后通过遍历节点,打印出每个节点的值,以验证在双向链表中插入新节点的正确性。

完成后,我们可以得到如下结果:

1
2
3

这证明在双向链表的末尾成功插入了新节点。