class Node(object):
"""定义结点类"""
def __init__(self,item): # 两个属性,一个是元素,一个下个结点的链接
self.item = item
self.next = None
class SingleLinkList(object):
"""单链表类"""
def __init__(self,node=None): # 初始化头部属性
self.__head = node
def is_empty(self): # 判断链表是否为空
return self.__head is None
def length(self): # 查看链表长度
cur = self.__head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def travel(self): # 遍历链表元素
cur = self.__head
while cur is not None:
print(cur.item,end=" ")
cur = cur.next
print()
def add(self,item): # 头部添加元素
node = Node(item)
node.next = self.__head
self.__head = node
def append(self,item): # 尾部添加元素, 先判断链表是否为空,若为空,直接让链表头指向要添加的结点
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next is not None:
cur = cur.next
cur.next = node
def insert(self,pos,item): # 链表中部添加元素 3中情况 头,尾,中
if pos <= 0:
self.add(item)
elif pos >= self.length():
self.append(item)
else:
node = Node(item)
count = 0
cur = self.__head
while count < pos -1:
count += 1
cur = cur.next
node.next = cur.next
cur.next = node
def remove(self,item): # 链表移除元素,就是取消需要删除元素的被引用关系
cur = self.__head
pre = None
while cur is not None:
if cur.item == item:
if self.__head == cur:
self.__head = cur.next
else:
pre.next = cur.next
pre = cur
cur = cur.next
def search(self,item): # 链表元素查询, 若有就返回True,否则就是False
cur = self.__head
while cur is not None:
if cur.item == item:
return True
else:
cur = cur.next
return False
if __name__ == '__main__':
ll = SingleLinkList()
ll.add(4) # 4
ll.travel()
ll.append(6) # 4 6
ll.travel()
ll.insert(1, 5) # 4 5 6
ll.travel()
ll.search(5) # True
ll.travel()
ll.remove(4) # 56
ll.travel()
ll.remove(5) # 6
ll.travel()
ll.remove(6) #
ll.travel()