下面为代码,代码注释中有解释,代码最后为测试
class Node:
def __init__(self, value=0, nex=None):
self.value = value
self.nex = nex
class ListNode:
def __init__(self, value=0, *args):
"""
初始化链表
:param value: int
:param args: int
"""
# 三元表达式 self.head = None if value == 0 else self.head = Node(value)错误
# 这是因为在赋值语句中不能在条件表达式中进行赋值操作。请修改这行代码为:self.head = None if value == 0 else Node(value)
# 这行代码的意思和之前的一样
self.head = None if value == 0 else Node(value)
p = self.head
for i in [*args]:
n = Node(i)
p.nex = n
p = p.nex
def en_empty(self):
"""
清空链表
:return:
"""
self.head = None
def show_all(self):
"""
打印所有节点
:return: int 链表长度
"""
p = self.head
while p != None:
print(p.value)
p = p.nex
def ret_sum(self):
# 链表长度
n = 0
p = self.head
while p != None:
n += 1
p = p.nex
return n
def empty(self):
"""
判断链表是否为空
:return: bool
"""
if self.head != None:
return False
else:
return True
def delete(self, n, *args):
"""
删除第n个位置的节点,如何删除*aegs中的节点,顺序按照删除没一个节点后的算
:param n: int
:return: None
"""
if self.empty():
print("链表为空!!!")
return
p = self.head
if n == 1: # 删除头节点
self.head = p.nex
return self.delete(*args)
for i in range(2, n): # 循环n-2次,让p到要删的那个点的前一个节点
p = p.nex
p.nex = p.nex.nex
for j in [*args]:
self.delete(j)
def insert(self, n, val):
"""
在第n个节点后进行插入,插入的值为val
:param n: int
:param val: int
:return:
"""
if n == 0:
if self.empty():
self.head = Node(val)
return
else:
p = Node(val)
p.nex = self.head
self.head = p
return
if n > self.ret_sum():
# 插入位置超出链表长度时
print("插入位置超出链表长度,无法插入!!!")
return
p = self.head
q = Node(val)
for i in range(1, n): # 循环n-2次,让p到要删的那个点的前一个节点
p = p.nex
q.nex = p.nex
p.nex = q
a = ListNode(1,2,4,3,5)
print(a.show_all())
print("///1")
a.delete(1, 2)
a.show_all()
print("///2")
a.insert(1, 6)
a.insert(4, 9)
a.show_all()
print("///3")
a.en_empty()
print(a.ret_sum())
a.show_all()
print("///4")
a.insert(1, 1)
a.show_all()