📅  最后修改于: 2023-12-03 15:34:26.471000             🧑  作者: Mango
在计算机科学中,循环链表是一种链表,其中最后一个节点的下一个节点是链表的第一个节点。循环链表可以通过将尾节点的指针引用到头部而建立起来。
循环链表相比普通链表,可以避免在操作链表时出现空指针异常(null pointer exception)的情况。特别地,当需要把每个节点的下一个节点和前一个节点都访问到时,循环链表也是一个不错的选择。在循环链表中,每一个节点都可以引用到下一个节点和前一个节点,可以更方便地进行迭代。
下面是一个简单易懂的 Python 代码实现循环链表的示例。其中,CircularLinkedList
类包含了 Node
类。
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
new_node.next = self.head
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = new_node
new_node.next = self.head
def remove(self, key):
if self.head.data == key:
current = self.head
while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.next
else:
current = prev = self.head
while current.next != self.head:
prev = current
current = current.next
if current.data == key:
prev.next = current.next
current = current.next
def __len__(self):
current = self.head
count = 0
while current:
count += 1
current = current.next
if current == self.head:
break
return count
def __getitem__(self, index):
if index >= len(self):
return None
current = self.head
for i in range(index):
current = current.next
return current.data
def __str__(self):
s = ""
current = self.head
while current:
s += str(current.data) + " "
current = current.next
if current == self.head:
break
return s
上述代码实现了循环链表的常用操作,包括添加节点、删除节点、获取链表长度和打印链表。下面是使用示例:
linked_list = CircularLinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
print(linked_list) # 1 2 3
linked_list.remove(2)
print(linked_list) # 1 3
循环链表是一种实现链表的数据结构,其特点在于最后一个节点的下一个节点指向第一个节点。Python语言中实现循环链表的代码也非常简单高效,是一个值得了解的数据结构。