Python 单向循环链表实例详解
单向循环链表是一种常用的链表结构,它和单向链表的最大区别在于其尾节点指向头节点。这种循环的结构使得我们可以轻松地在链表中进行循环操作。下面我们来详细讲解如何使用 Python 实现单向循环链表。
实现思路
-
实现节点类:首先我们需要定义一个节点类,用来储存我们链表中的每个节点,并且需要定义一些方法来访问和更新节点的值、指针等信息。
-
实现链表类:我们还需要定义一个链表类,用来连接所有的节点。链表类中应该定义一些实用的方法,比如链表的增加、查找、删除等等。
节点类的代码实现
class Node:
def __init__(self, value):
self.value = value
self.next = None
我们定义了一个叫做 Node
的类,它包含两个属性,一个是 value
用于存储节点的值,另一个是 next
,用于连接下一个节点。
链表类的代码实现
class CircularLinkedList:
def __init__(self):
self.head = None
def append(self, value):
new_node = Node(value)
if not self.head:
self.head = new_node
self.head.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 print_list(self):
current = self.head
while current:
print(current.value)
current = current.next
if current == self.head:
break
def remove(self, value):
if self.head.value == value:
current = self.head
while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.next
else:
current = self.head
prev = None
while current.next != self.head:
prev = current
current = current.next
if current.value == value:
prev.next = current.next
current = current.next
我们定义了一个叫做 CircularLinkedList
的类,这个类包含一个属性 head
,它是链表的头节点。我们还定义了三个方法,分别是 append()
、print_list()
和 remove()
。
-
append()
方法:用于添加新的节点到链表中- 如果链表为空,直接将新节点作为头结点,将其下一个节点指向自己。
- 如果链表不为空,找到尾节点,将尾节点的下一个节点指向新节点,然后将新节点的下一个节点指向头结点。
-
print_list()
方法:用于打印链表的所有节点的值,由于是循环链表,需要判断当前节点是否已经回到头节点,否则会因为死循环而无法退出。 -
remove()
方法:用于删除链表中的某一个节点,有两种情况,一种是要删除的节点是头节点,另一种是要删除的节点不是头节点。- 如果要删除的节点是头节点,首先需要找到尾节点,然后将尾节点的下一个节点指向头节点的下一个节点,然后将头节点指向头节点的下一个节点。
- 如果要删除的节点不是头节点,先从头节点开始遍历,同时记录当前节点和前一个节点,一旦找到待删除节点,就将前一个节点的下一个节点指向待删除节点的下一个节点即可。
使用示例
示例1:创建链表并打印
# 创建空链表
my_list = CircularLinkedList()
# 添加数据
my_list.append(1)
my_list.append(2)
my_list.append(3)
my_list.append(4)
my_list.append(5)
# 打印链表
my_list.print_list()
输出结果:
1
2
3
4
5
示例2:删除数据并打印
# 删除数据
my_list.remove(2)
# 打印链表
my_list.print_list()
输出结果:
1
3
4
5
总结
以上就是用 Python 实现单向循环链表的完整攻略。实现起来比较简单,同时也展现了 Python 面向对象编程和链表操作的应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python单向循环链表实例详解 - Python技术站