定义
循环单链表与单链表唯一的不同就是其最后一个结点并非None,而是指向第一个结点(如果有头结点,就是指向头结点)
python实现
创建循环单链表
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
结果:
循环单链表首端插入元素
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
'''首端插入元素'''
def InsertElementInHead(self):
element = input("请输入要插入的值:")
cNode = self.head
nNode = Node(int(element))
nNode.next = cNode.next
cNode.next = nNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElementInHead()
结果:
循环单链表尾端插入元素
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
'''尾端插入元素'''
def InsertElementInTail(self):
element = input("请输入要插入的值:")
cNode = self.head
nNode = Node(int(element))
while cNode.next != self.head:
cNode = cNode.next
nNode.next = self.head
cNode.next = nNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElementInTail()
结果:
删除循环单链表指定元素
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
'''删除指定元素'''
def DeleteElement(self):
element = int(input("请输入要删除的值:"))
cNode = self.head
pNode = self.head
while cNode.next !=self.head and cNode.data != element:
pNode = cNode
cNode = cNode.next
if cNode.data == element:
pNode.next= cNode.next
del cNode
print('删除成功')
else:
print('删除失败')
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.DeleteElement()
结果:
获取循环单链表长度
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
'''获取循环单链表长度'''
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.GetLength()
结果:
判断链表是否为空
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
if data == "#":
cNode.next = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''判断链表是否为空'''
def IsEmpty(self):
if self.GetLength()== 0:
return True
else:
return False
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.IsEmpty()
结果:
销毁循环单链表
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
if data == "#":
cNode.next = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''判断链表是否为空'''
def IsEmpty(self):
if self.GetLength()== 0:
return True
else:
return False
'''销毁循环单链表'''
def DestoryCircularSingleLinkedList(self):
cNode = self.head
cNode.next = self.head
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.DestoryCircularSingleLinkedList()
CircularSingleList.IsEmpty()
结果:
在表中指定位置插入结点
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
if data == "#":
cNode.next = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''输入的位置不是首端,也不是尾端,且有效'''
def InsertElement(self):
index = int(input('请输入要插入的位置:'))
key = int(input("请输入要插入的值:"))
cNode = self.head
pNode = self.head # 前一个结点
pos = 0
while cNode.next != self.head and pos < index:
pNode = cNode
cNode = cNode.next
pos += 1
if index == pos:
qNode = Node(key)
pNode.next = qNode
qNode.next = cNode
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.InsertElement()
CircularSingleList.GetLength()
结果:
获取表中指定位置结点的值
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
if data == "#":
cNode.next = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''获取表中指定位置结点的值'''
def GetElement(self):
index = int(input('请输入要插入的位置:'))
cNode = self.head
pos = 0
while cNode.next != self.head and pos < index:
cNode = cNode.next
pos += 1
if index == pos:
return cNode.data
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList. GetElement()
结果:
遍历循环单链表
class Node:
def __init__(self,data):
self.data = data
self.next = None
class CircularSingleLinkedList:
def __init__(self):
self.head = Node(None)
'''创建循环单链表'''
def CreateCircularSingleLinkedList(self):
data = input("请输入结点的值(按#结束输入):")
cNode = self.head
if data == "#":
cNode.next = self.head
while data != "#":
nNode = Node(int(data))
cNode.next = nNode
nNode.next = self.head
cNode = cNode.next
data = input("请输入结点的值(按#结束输入):")
def GetLength(self):
cNode = self.head
length = 0
while cNode.next !=self.head :
length = length+1
cNode = cNode.next
return length
'''判断链表是否为空'''
def IsEmpty(self):
if self.GetLength()== 0:
return True
else:
return False
def VisitElement(self,tNode):
if tNode!= self.head:
print(tNode.data,'->',end= ' ')
def TravelElement(self):
cNode = self.head
if self.IsEmpty():
print('单链表为空')
return
print('单链表如下:')
print('head->',end= ' ')
while cNode.next != self.head:
cNode = cNode.next # 头结点没有数据
self.VisitElement(cNode)
print('head')
CircularSingleList = CircularSingleLinkedList()
CircularSingleList.CreateCircularSingleLinkedList()
CircularSingleList.TravelElement()
结果:
具体实例可点此链接查看:
https://blog.csdn.net/weixin_40283816/article/details/87557067
扫描二维码关注公众号,回复:
5291423 查看本文章