单向循环链表
单向循环链表:
在单向链表中,头指针是相当重要的,因为单向链表的操作都需要头指针,所以如果头指针丢失或者破坏,
那么整个链表都会遗失,并且浪费链表内存空间。
单向循环链表的构成:
如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表。
python实现单向循环链表
class Node():
'''单循环链表的结点:next默认指向头结点'''
def __init__(self,elem):
self.elem = elem
self.next = None
class SingleCycleLinkList():
'''循环单链表'''
def __init__(self,node=None):
self.__head = node
#node如果不是指向None,说明不是空链表,next虚需要指向自己,构成环
if node:
node.next = node
def is_empty(self):
'''链表是否为空'''
# 如果头结点为None,说明为空,返回true
return self.__head == None
def length(self):
'''链表长度:求链表长度需要从头开始遍历并计数;
注意考虑特殊情况,即链表为空链表,即头结点为None,不会进入循环,需要加判断如果链表为空,直接返回0 ;
另一种特殊情况,循环链表只有一个结点,cur.next ==self.__head ,
不会进入循环,返回的count为1'''
if self.__head == None:
return 0
else:
# 游标cut表示指向当前结点,初始指向头结点
cur =self.__head
# count用来计数,从1开始
count = 1
#循环退出条件:由于单循环链表的尾结点不指向None,而是指向头结点;
#所以当游标cur.next指向头结点时,整个链表循环一遍,循环结束。
while cur.next != self.__head:
#循环一次,count计数加1
count += 1
#游标cur也向后移动一个结点
cur = cur.next
# 循环结束,count的值即为链表长度,返回count
return count
def travel(self):
'''遍历整个链表:需要从头开始,输出每个结点的元素;
注意考虑特殊情况,即链表为空链表,即头结点为None,不需要输出任何元素,所以需要另外写判断处理,如果为空,直接返回
另一种特殊情况,链表只有一个结点,即cur.next == self._head ,不会进入循环,直接打印结点,符合要求 '''
if self.is_empty():
return
else:
#定义游标cur表示指向当前结点,初始指向头结点
cur