单向循环链表
1. 循环链表
循环链表是一种特殊的单链表。实际上,循环链表也很简单。它跟单链表唯一的区别就在尾结点。我们知道,单链表的尾结点指针指向空地址,表示这就是最后的结点了。而循环链表的尾结点指针是指向链表的头结点。它像一个环一样首尾相连,所以叫作“循环”链表。
2. 单向循环链表的实现
# 节点的实现
class Node(object):
def __init__(self, item):
self.item = item
self.next = None
# 单向循环链表的实现
class SingleCycleLinkList(object):
def __init__(self, node=None):
if node == None:
self.__head = node
else:
self.__head = node
node.next = self.__head
def is_empty(self):
'''is_empty() 链表是否为空'''
return self.__head == None
def length(self):
'''length() 链表长度'''
long = 0
cur = self.__head
if self.__head == None:
return long
long += 1
while cur.next != self.__head:
long += 1
cur = cur.next
return long
def travel(self):
'''travel() 遍历整个链表'''
cur = self.__head
if self.is_empty():
return None
else:
while cur.next != self.__head:
print(cur.item, end=' ')
cur = cur.next
print(cur.item)
def append(self, item):
'''append(item) 链表尾部添加元素'''
node = Node(item)
cur = self.__head
if self.is_empty():
self.__head = node
node.next = self.__head
else:
while cur.next != self.__head:
cur = cur.next
cur.next = node
node.next = self.__head
def add(self, item):
'''add(item) 链表头部添加元素'''
node = Node(item)
if self.is_empty():
self.__head = node
node.next = self.__head
# self.append(item)
else:
cur = self.__head
while cur.next != self.__head:
cur = cur.next
node.next = self.__head
self.__head = node
cur.next = self.__head
def insert(self, pos, item):
'''insert(pos, item) 指定位置添加元素'''
node = Node(item)
if pos <= 0:
self.add(item)
elif pos >= self.length():
self.append(item)
else:
pre = self.__head
cur = self.__head
long = 0
while long < pos:
pre = cur
cur = cur.next
long += 1
pre.next = node
node.next = cur
def search(self, item):
'''search(item) 查找节点是否存在'''
cur = self.__head
if self.is_empty():
return False
else:
while cur.next != self.__head:
if cur.item == item:
return True
cur = cur.next
if cur.item == item:
return True
return False
def remove(self, item):
'''remove(item) 删除节点'''
cur = self.__head
pre = self.__head
if self.is_empty():
return None
elif self.length() == 1 and self.__head.item == item:
self.__head = None
else:
while cur.next != self.__head:
pre = cur
cur = cur.next
if self.__head.item == item:
self.__head = self.__head.next
cur.next = self.__head
elif cur.item == item:
pre.next = self.__head
else:
cur = self.__head
pre = self.__head
while cur.next != self.__head:
if cur.item == item:
pre.next = cur.next
pre = cur
cur = cur.next
3. 小结
通过这堂课的学习,对于循环链表我大概是掌握了,主要还是逻辑问题,逻辑理清了,自然而然就会了。这堂课以及课后训练的成效还是很大的,还是要继续努力学习。
本文深入探讨了单向循环链表的概念与实现,详细介绍了节点与链表的定义,包括链表的创建、遍历、添加、插入、搜索与删除操作。通过实例解析,帮助读者理解单向循环链表的运作机制。
293

被折叠的 条评论
为什么被折叠?



