python单向循环链表_单向循环链表之python

classNode(object):def __init__(self,elem):

self.elem=elem

self.next=NoneclassSingleLinkCir(object):def __init__(self,node=None):

self.__head =nodeifnode:

self.node= node #节点默认指向自己

defis_empty(self):return self.__head ==None"""遍历所有节点,并记录数据"""

deflength(self):ifself.is_empty():return0

cur= self.__headcount= 1

while cur.next != self.__head:#跳出循环条件,当当当前指针的下一指针指向头结点时证明此节点为为尾节点

cur =cur.next

count+= 1

returncountdeftravel(self):

cur= self.__head

if self.__head ==None:returnNoneelse:while cur.next != self.__head:print(cur.elem,end="")

cur=cur.nextprint(cur.elem)#当cur等于尾节点时,退出循环,但是尾节点的元素需要打印,所以退出循环时候进行打印

defadd(self,item):

node=Node(item)if self.is_empty():#判断链表是否为空

self.__head =node

node.next=nodeelse:

cur= self.__head

while cur.next != self.__head:

cur=cur.next

node.next= self.__headself.__head =node

cur.next=nodedefappend(self,item):

node=Node(item)#cur = self.__head

ifself.is_empty():

self.__head =node

node.next=nodeelse:

cur= self.__head

while cur.next != self.__head:

cur=cur.next#cur.next = node.next

node.next = self.__headcur.next=nodedefinsert(self,pos,item):if pos <=0:

self.add(item)elif pos > (self.length()-1):

self.append(item)else:

node=Node(item)

cur= self.__headcount=0ifis_empty():

self.__head ==node

node.next=nodeelse:while count

cur=cur.next

count+= 1node.next=cur.next

cur.next=nodedefsearch(self,item):

cur= self.__head

ifself.is_empty():returnFalsewhile cur.elem !=item:if cur.next !=self.__head:

cur=cur.nextelse:returnFalsereturnTruedefremove(self,item):ifself.is_empty():returncur= self.__headpre=Nonewhile cur.elem !=item:if cur.next != self.__head:

pre=cur

cur=cur.nextelse:returnFalseif cur == self.__head:#如果删除的是头结点,要找到尾节点,把尾节点的指向改为原来头结点的next

if self.length() != 1:#判段链表中是否只有一个节点,只有一个节点则引入尾节点,

rear_node = self.__head

while rear_node.next != self.__head:

rear_node=rear_node.next#pre.next = self.__head

self.__head =cur.next

rear_node.next= self.__head

#rear.next = cur.next

#self.__head= cur.next

else:#只有一个节点,删除唯一节点,

self.__head =Noneelse:#删除中间节点和尾节点

pre.next=cur.nextif __name__ == "__main__":

ll=SingleLinkCir()print(ll.is_empty())print(ll.length())

ll.append(1)print(ll.is_empty())print(ll.length())#ll.travel()

print("*" * 50)

ll.remove(1)

ll.append(2)

ll.add(8)

ll.insert(3,3)

ll.travel()

ll.append(100)

ll.travel()

ll.remove(100)

ll.travel()

ll.remove(8)

ll.travel()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值