insert方法,在中部插入时候与单向链表一样,头部和尾部插入的方法已经写了add和append,不必再重写,继续写search和delete方法,代码如下;
def insert(self,i,item):
if i<=0:
self.add(item)
elif i>=self.length():
self.append(item)
else:
node = Node(item)
cur = self.__head
index = 0
while index < i-1:
index = index +1
cur = cur.next
node.next = cur.next
cur.next = node
def search(self,item):
if self.isEmpty():
return False
cur = self.__head
if cur.item == item:
return True
while cur.next is not self.__head:
cur = cur.next
if cur.item == item:
return True
return False
def delete(self,item):
cur = self.__head
pre = None
while cur.next is not self.__head:
if cur.item == item:
if pre is None:
temp = self.__head
while temp.next is not self.__head:
temp = temp.next
self.__head = cur.next
temp.next = self.__head
else:
pre.next = cur.next
pre = cur
cur = cur.next
if cur.item == item:
if pre is None:
self.__head = None
else:
pre.next = self.__head
这里的delete方法比较复杂,要注意删除的是头节点尾节点的情况
main方法:
if __name__ == '__main__':
sll = SingleCirlceLinkedList()
print (sll.length())
sll.add(8)
sll.add(9)
sll.append(10)
print (sll.search(8))
sll.delete(9)
sll.walk()