classNode(object):"""节点"""
def __init__(self, item):
self.item=item
self.next=NoneclassSinCycLinkedlist(object):"""单向循环链表"""
def __init__(self):
self._head=Nonedefis_empty(self):"""判断链表是否为空"""
return self._head ==Nonedeflength(self):"""返回链表的长度"""
#如果链表为空,返回长度0
ifself.is_empty():return0
count= 1cur=self._headwhile cur.next !=self._head:
count+= 1cur=cur.nextreturncountdeftravel(self):"""遍历链表"""
ifself.is_empty():returncur=self._headprintcur.item,while cur.next !=self._head:
cur=cur.nextprintcur.item,print ""
defadd(self, item):"""头部添加节点"""node=Node(item)ifself.is_empty():
self._head=node
node.next=self._headelse:#添加的节点指向_head
node.next =self._head#移到链表尾部,将尾部节点的next指向node
cur =self._headwhile cur.next !=self._head:
cur=cur.next
cur.next=node#_head指向添加node的
self._head =nodedefappend(self, item):"""尾部添加节点"""node=Node(item)ifself.is_empty():
self._head=node
node.next=self._headelse:#移到链表尾部
cur =self._headwhile cur.next !=self._head:
cur=cur.next#将尾节点指向node
cur.next =node#将node指向头节点_head
node.next =self._headdefinsert(self, pos, item):"""在指定位置添加节点"""
if pos <=0:
self.add(item)elif pos > (self.length()-1):
self.append(item)else:
node=Node(item)
cur=self._head
count=0#移动到指定位置的前一个位置
while count < (pos-1):
count+= 1cur=cur.next
node.next=cur.next
cur.next=nodedefremove(self, item):"""删除一个节点"""
#若链表为空,则直接返回
ifself.is_empty():return
#将cur指向头节点
cur =self._head
pre=None#若头节点的元素就是要查找的元素item
if cur.item ==item:#如果链表不止一个节点
if cur.next !=self._head:#先找到尾节点,将尾节点的next指向第二个节点
while cur.next !=self._head:
cur=cur.next#cur指向了尾节点
cur.next =self._head.next
self._head=self._head.nextelse:#链表只有一个节点
self._head =Noneelse:
pre=self._head#第一个节点不是要删除的
while cur.next !=self._head:#找到了要删除的元素
if cur.item ==item:#删除
pre.next =cur.nextreturn
else:
pre=cur
cur=cur.next#cur 指向尾节点
if cur.item ==item:#尾部删除
pre.next =cur.nextdefsearch(self, item):"""查找节点是否存在"""
ifself.is_empty():returnFalse
cur=self._headif cur.item ==item:returnTruewhile cur.next !=self._head:
cur=cur.nextif cur.item ==item:returnTruereturnFalseif __name__ == "__main__":
ll=SinCycLinkedlist()
ll.add(1)
ll.add(2)
ll.append(3)
ll.insert(2, 4)
ll.insert(4, 5)
ll.insert(0,6)print "length:",ll.length()
ll.travel()print ll.search(3)print ll.search(7)
ll.remove(1)print "length:",ll.length()
ll.travel()