‘’’
说明:链表的本质是列表
链表的简单操作:
基础方法:
is_empty()—判断是否为空
length()—测量长度
travel()—遍历链表
增:
add()—头部插入
1append()—尾部插入
insert()—中间某个位置插入
删:
remove()—删除
查:
search()—查找元素
‘’’
‘’’
实现步骤:1、创建结点类----用类方法
2、创建链表类----用对象方法
‘’’
class Node(object):
def init(self,elem):
self.elem = elem
self.next = None
class SingleLinklist(object):
def init(self,node=None):
‘’‘创建self.__head私有属性,其作为特殊的引导结构,含有指针功能。
让其指向一个虚无空结点node,形成链表结构,默认此链表为空。
同时链表上的结点具有结点的elem和next属性’’’
self.__head = node
if node:
node.next = node
def is_empty(self):
return self.__head == None
def length(self):
'''创建一个游标cur用来移动遍历结点。
self__head指向第一个结点,此时的cur也指向第一个结点'''
if self.is_empty():
return 0
else:
cur = self.__head
'''用count来计数结点个数'''
count = 1
while cur.next != self.__head:
count +=1
cur = cur.next
return count
def travel(self):
if self.is_empty():
return None
cur = self.__head
while cur.next != self.__head:
print(cur.elem,end='')
cur = cur.next
#尾节点需要打印出来
print(cur.elem)
def add(self,item):
'''头插法:需要考虑self__head的指针指向、首结点指针指向、尾节点指针指向
分为:空结点、只有一个结点、多结点
'''
node = Node(item)
cur = self.__head
while self.is_empty():
self.__head = node
node.next = node
else:
while cur.next != self.__head:
cur = cur.next
node.next = self.__head
self.__head = node
def append(self,item):
'''空链表'''
node = Node(item)
if self.is_empty():
self.__head = node
node.next = node
else:
cur = self.__head
while cur.next != self.__head:
cur = cur.next
node.next = self.__head
cur.next = node
def insert(self,pos,item):
node = Node(item)
'''pos是从0开始索引'''
pre = self.__head
count = 0
if pos <= 0:
self.add(item)
while pos > (self.length()-1):
self.append(item)
while count < (pos -1):
count +=1
pre = pre.next
node.next = pre.next
pre.next = node
def remove(self,item):
'''要删除结点分为首结点、中间结点、尾节点。同时判断链上一共有多少个结点'''
if self.is_empty():
return False
node = Node(item)
cur = self.__head
pre = None
while cur.next != self.__head:
if cur.elem == item:
'''先判断此结点是否为首结点'''
if cur == self.__head:
'''删除头结点情况下'''
'''判断尾节点是第几个结点'''
rear = self.__head
while rear.next != self.__head:
rear =rear.next
self.__head =cur.next
rear.next = self.__head
else:
'''中间结点'''
pre.next = cur.next
return
else:
pre = cur
cur =cur.next
'''尾节点'''
if cur.elem == item:
if self.__head == cur:
self.__head = None
else:
pre.next = cur.next
def search(self,item):
node = Node(item)
cur = self.__head
if self.is_empty():
return False
while cur.next != self.__head:
if cur.elem == item:
return True
else:
cur = cur.next
if cur.elem == item:
return True
return False
if name == ‘main’:
ll = SingleLinklist()
print(ll.is_empty())
print(ll.length在这里插入代码片