python 单链表是否有回路_python 链表实现 单链表

classNode(object):#单链表节点类实现

def __init__(self,elem):

self.elem=elem

self.next=NoneclassSingleLinkList(object):#单链表类实现

def __init__(self,node=None):

self.__head =nodedefis_empty(self):#判断链表是否为空

return self.__head ==Nonedeflength(self):#链表的长度

#cur游标,用来遍历节点,count记录数量

cur = self.__headcount=0while cur !=None:

count+= 1cur=cur.nextreturncountdeftravel(self):#遍历链表

cur = self.__head

while cur !=None:print(cur.elem,end=' ')

cur=cur.nextprint('')defadd(self,item):#在链表头部添加节点

node =Node(item)

node.next= self.__headself.__head =nodedefappend(self,item):#在链表尾部添加节点

node =Node(item)ifself.is_empty():

self.__head =nodeelse:

cur= self.__head

while cur.next !=None:

cur=cur.next

cur.next=nodedefinsert(self,pos,item):#在链表指定位置添加节点

#pos从0开始

if pos <=0:

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

self.append(item)else:

pre= self.__headcount=0while count < (pos-1):

count+= 1pre=pre.next#当退出循环后,pre指向pos-1位置

node =Node(item)

node.next=pre.next

pre.next=nodedefremove(self,item):#移除节点

cur = self.__headpre=Nonewhile cur !=None:if cur.elem ==item:#先判断此节点是否是头节点

#头节点

if cur == self.__head:

self.__head =cur.nextelse:

pre.next=cur.nextbreak

else:

pre=cur

cur=cur.nextdefsearch(self,item):#查找节点

cur = self.__head

while cur !=None:if cur.elem ==item:returnTrueelse:

cur=cur.nextreturnFalseif __name__ == '__main__':

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

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

ll.append(2)

ll.add(8)

ll.append(3)

ll.append(4)

ll.append(5)

ll.append(6)

ll.insert(-1,9)

ll.travel()

ll.insert(3,100)

ll.travel()

ll.insert(10,200)

ll.travel()

ll.remove(100)

ll.travel()

ll.remove(9)

ll.travel()

ll.remove(200)

ll.travel()'''运行结果:

True

0

False

1

9 8 1 2 3 4 5 6

9 8 1 100 2 3 4 5 6

9 8 1 100 2 3 4 5 6 200

9 8 1 2 3 4 5 6 200

8 1 2 3 4 5 6 200

8 1 2 3 4 5 6'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值