📅  最后修改于: 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]
可以看到,我们成功地在链表中插入了两个元素,并将它们正确地连接到了链表中。