📅  最后修改于: 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
这证明在双向链表的末尾成功插入了新节点。