双向链表(Doubly Linked List)在Python中的实现

2023-04-11 00:00:00 链表 双向 Doubly

双向链表是一种链表数据结构,每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点。这种数据结构可以支持双向迭代,即可以从前向后或从后向前访问链表中的元素。在Python中,我们可以使用一个类来实现双向链表。

以下是一个简单的双向链表的实现:

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

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

    def append(self, data):
        new_node = Node(data)

        if self.head is None:
            self.head = new_node
            return

        current_node = self.head
        while current_node.next is not None:
            current_node = current_node.next

        current_node.next = new_node
        new_node.prev = current_node

    def prepend(self, data):
        new_node = Node(data)

        if self.head is None:
            self.head = new_node
            return

        self.head.prev = new_node
        new_node.next = self.head
        self.head = new_node

    def print_list(self):
        current_node = self.head
        while current_node is not None:
            print(current_node.data)
            current_node = current_node.next

在上面的代码中,我们定义了一个 Node 类和一个 DoublyLinkedList 类。Node 类表示链表中的一个节点,它包含一个数据域 data 和两个指针域 prevnext,分别指向前一个节点和后一个节点。

DoublyLinkedList 类实现了双向链表的基本操作,如插入节点、删除节点和遍历链表等。其中,append() 方法可以在链表的末尾添加一个新节点,prepend() 方法可以在链表的头部添加一个新节点,print_list() 方法可以遍历整个链表并打印出其中的元素。

下面是使用上面的双向链表实现的一个简单示例:

# 创建一个双向链表,并在尾部添加几个节点
dll = DoublyLinkedList()
dll.append('p')
dll.append('i')
dll.append('d')
dll.append('a')
dll.append('n')
dll.append('c')
dll.append('o')
dll.append('d')
dll.append('e')
dll.append('.')
dll.append('c')
dll.append('o')
dll.append('m')

# 在头部添加一个新节点
dll.prepend('皮蛋编程')

# 遍历链表并打印出其中的元素
dll.print_list()

运行上面的代码,输出结果如下:

皮蛋编程
p
i
d
a
n
c
o
d
e
.
c
o
m

从输出结果可以看出,我们成功地创建了一个双向链表,并可以从头到尾遍历链表中的元素。

相关文章