# 单链表----------------------------------------
class ListNode: # 单链表的定义
def __init__(self, value, pointer):
self.elem = value
self.next = pointer
class ListHandle: # 单链表的操作
def __init__(self): # 新建单链表
self.head = None
self._length = 0
def is_empty(self): # 单链表的判空
# if self.elem is None:
# print('单链表为空')
# return True
# else:
# print('单链表不为空')
# return False
if self._length == 0:
print('单链表为空')
return True
else:
print('单链表不为空')
return False
def get_length(self): # 求单链表的长度
# p = self.head
# temp = 0
# while p.next is not None:
# temp += 1
# p = p.next
# return temp
print('单链表的长度为%d' % self._length)
return self._length
def add_node(self, value): # 增加节点
# if self.elem is None:
# list_1 = List(value, None)
# return list_1
# else:
# p = self.head
# while p.next != 'None':
# p = self.next
# p.next = List(value, None)
return
def ergodic_node(self, value): # 遍历单链表
p = self.head
temp = 1
while p.next is not None:
if p.elem == value:
print('单链表中存在此元素')
return temp
temp += 1
p = p.next
print('单链表中不存在此元素')
return False
def first_insert_node(self, value): # 首端插入节点
p_1 = ListNode(value, None)
p_2 = self.head
self.head = p_1.elem
self.head.next = p_2
self._length = self._length + 1
return
def appoint_insert_first_node(self, value, times): # 在指定位置前插入节点
if times >= self._length:
print('错误')
return
p_1 = ListNode(value, None)
temp = 0
p_2 = self.head
while p_2.next is not None:
temp += 1
p_2 = p_2.next
if temp == times - 1:
break
p_3 = p_2.next
p_2.next = p_1.elem
p_1.next = p_3.elem
self._length = self._length + 1
return
def appoint_insert_end_node(self, value, times): # 在指定位置后插入节点
if times >= self._length:
print('错误')
return
p_2 = ListNode(value, None)
p_1 = self.head
temp = 0
while p_1.next is not None:
temp += 1
p_1 = p_1.next
if temp == times:
break
self._length = self._length + 1
p_3 = p_2.next
p_1.next = p_2.elem
p_2.next = p_3.elem
return
def end_insert_node(self, value): # 尾端插入节点
p_2 = ListNode(value, None)
self._length = self._length + 1
p_1 = self.head
while p_1 is not None:
p_1 = p_1.next
p.next = p_2.elem
return
def first_delete_node(self): # 首端删除节点
self.head = self.head.next
self._length = self._length - 1
return
def appoint_delete_times_node(self, times): # 删除指定位置节点
p_1 = self.head
temp = 0
while p_1.next is not None:
p_1 = p_1.next
temp += 1
if temp == times - 1:
break
p_2 = p_1.next
p_1.next = p_2.elem
self._length = self._length - 1
return
def appoint_delete_value_node(self, value): # 删除指定值节点
p_1 = self.head
p_2 = p_1.next
p_3 = p_2.next
if value == self.head.elem:
self.head = self.head.next
self._length = self._length - 1
temp = 0
while p_2.next is not None:
if p_2.elem == value:
p_1.next = p_3.elem
temp += 1
p_2 = p_2.next
self._length = self._length - temp
return
def end_delete_node(self): # 尾端删除节点
p = self.head
while p.next.next is not None:
p = p.next
p.next = None
p._length = p._length - 1
return
def reversal_list(self): # 反转单链表
p_1 = self.head
p = self.head
p_2 = p_1.next
p_1.next = None
while p.next is not None:
p_2.next = p_1.elem
p_1 = p_1.next
p_2 = p_2.next
p.head = p_2.elem
return
def print_all(self): # 打印单链表的所有项
p = self.head
while p.elem is not None:
print(p.elem)
p = p.next
def change_list_array(self): # 把单链表转为数组输出
array = []
p = self.head
while p.elem is not None:
array.append(p.elem)
p = p.next
return array
if __name__ == "__main__":
# 创建空表
list_test = ListNode(None, None)
# 对表赋值n次
for i in range(n):
list_test.next = ListNode(i, None)
list_test = list_test.next
# 使用while循环输出单链表
while list_test.elem is not None:
print(list_test.elem)
list_test = list_test.next
# 打印链表所有项的值
list_test.print_all()
单链表(python3)
最新推荐文章于 2022-03-25 22:58:09 发布