📜  双向循环链表|设置 1(介绍和插入)(1)

📅  最后修改于: 2023-12-03 15:22:51.707000             🧑  作者: Mango

双向循环链表 - 简介和插入操作

1. 什么是双向循环链表?

双向循环链表是一种常见的数据结构,它由多个节点(Node)组成,每个节点都包含一个存储数据的变量(data)和两个指针变量(prev和next),分别指向前一个节点和后一个节点,最后一个节点的next指针指向第一个节点,第一个节点的prev指针指向最后一个节点,形成了一个闭合的环形结构。因为每个节点既可以往前遍历也可以往后遍历,所以称为双向循环链表。

2. 双向循环链表的优点

相对于单向链表,双向循环链表有以下优点:

  • 可以像单向链表一样从头到尾遍历,也可以像双向链表一样从尾部往前遍历。
  • 因为每个节点有两个指针,所以插入节点和删除节点时只需要修改相邻节点的指针,而不需要像单向链表那样找到前一个节点。
  • 可以方便地实现各种操作,如栈、队列、双端队列等。
3. 双向循环链表 - 插入操作

下面是双向循环链表的插入操作的示例代码:

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

class DoubleLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None
        self.size = 0

    def insert(self, data):
        new_node = Node(data)
        if self.size == 0:
            self.head = new_node
            self.tail = new_node
            self.head.next = self.tail
            self.tail.prev = self.head
        else:
            self.tail.next = new_node
            new_node.prev = self.tail
            self.tail = new_node
            self.tail.next = self.head
            self.head.prev = self.tail
        self.size += 1

上面的代码实现了在双向循环链表尾部插入一个新节点的操作。如果链表为空,则将新节点既设为头部也设为尾部,并且指向自己;如果链表不为空,则将新节点添加到尾部,并且将链表头部的prev指针指向尾部,尾部的next指针指向头部。最后,更新链表的大小size属性。

4. 总结

双向循环链表是一种非常有用的数据结构,可以方便地实现各种操作。在实现双向循环链表时,需要特别小心节点的prev和next指针的相互关系,以免出现指针丢失等错误。