1. 单向循环链表
单向循环链表(Singly circular linked list)next
2. Python实现
接下来我们使用Python 3来构建单向循环链表数据结构,首先需要定义一个节点类:
class Node: '''单向循环链表的节点''' def __init__(self, value): self.value = value # 节点的信息域 self.next = None # 节点的指针域 def __repr__(self): return 'Node({!r})'.format(self.value)
然后定义单向循环链表类:
class SinglyCircularLinkedList: def __init__(self, node=None): '''创建一个单向循环链表对象时,如果不传入头节点,则创建空链表''' self.__head = node if node: node.next = node # 如果创建非空链表,它的 next 要指向头节点,即指向它自身
2.1 判断是否空链表
__head
def is_empty(self): '''判断是否为空链表''' return self.__head is None
2.2 求链表的长度
curcur = self.__headcountcurcur.next == self.__head
count
def length(self): '''求链表的长度''' if self.is_empty(): return 0 # 空链表直接返回0 cur = self.__head # 游标,用来表示当前节点 count = 0 # 用来统计已遍历的节点数目 while True: count += 1 if cur.next == self.__head: # 遍历到尾节点时,cur.next == self.__head,需要退出循环 break cur = cur.next # 向后移动游标 return count
2.3 遍历链表
逻辑跟求长度一样,注意,这里使用生成器语法,将每个节点的值产出供客户代码使用
def travel(self): '''遍历整个链表''' if self.is_empty(): return cur = self.__head # 游标,用来表示当前节点 while True