📜  循环单向链表 |插入(1)

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

循环单向链表 | 插入

循环单向链表是一种链表结构,其中每个节点都包含数据和一个指向下一个节点的指针。链表中的最后一个节点指向第一个节点,形成一个环。

插入操作是在链表中插入新节点的过程。当插入节点时,需要调整相邻节点的指针,以确保新节点被正确连接到链表中。在循环单向链表中,我们需要特别处理尾部节点,以使其指向链表头部。

描述节点类

首先,我们需要创建一个Node类,描述链表的节点。该类将包含一个数据变量和一个next指针。用Python代码实现如下:

class Node:
    def __init__(self, data = None):
        self.data = data
        self.next = None
描述链表类

接下来,我们需要创建一个LinkedList类来描述整个链表。该类将包含一个头节点和一些方法来操作链表。用Python代码实现如下:

class LinkedList:
    def __init__(self):
        self.head = Node()
        self.head.next = self.head  # 头节点的next指针指向自身,方便后续操作

    def append(self, data):
        new_node = Node(data)
        current = self.head
        while current.next != self.head:
            current = current.next
        current.next = new_node
        new_node.next = self.head
    
    def insert(self, data, pos):
        if pos < 0 or pos >= self.length():
            raise IndexError("Index out of range")
        new_node = Node(data)
        current = self.head
        index = 0
        while index < pos:
            current = current.next
            index += 1
        new_node.next = current.next
        current.next = new_node
    
    def length(self):
        current = self.head
        total = 0
        while current.next != self.head:
            total += 1
            current = current.next
        return total
    
    def display(self):
        elements = []
        current = self.head
        while current.next != self.head:
            current = current.next
            elements.append(current.data)
        print(elements)

上述代码中,我们实现了以下方法:

  • __init__:初始化一个空的链表,包含一个头节点,并将头节点的next指针指向自身。
  • append:在链表尾部添加一个元素。由于链表是循环的,需要特别处理尾部节点,以使其指向链表头部。
  • insert:在指定位置插入一个元素。由于是循环单向链表,我们需要处理特殊位置和头节点的插入操作。
  • length:获取链表的长度。
  • display:打印链表中的所有元素。
测试

现在,我们可以使用上述代码来测试链表的插入操作。

linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.insert(5, 0)
linked_list.insert(4, 3)
linked_list.display()  # 打印链表中的所有元素

输出结果为:

[5, 1, 2, 4, 3]

可以看到,我们成功地在链表中插入了两个元素,并将它们正确地连接到了链表中。