6-2 在单链表中增加或删除结点操作 (40 分)
在单链表类定义中,包含单链表的一些常见操作方法,请补充插入结点方法和删除结点的方法
函数接口定义:
def Insert(self, i, e): # 在线性表中序号i位置插入元素e
def Delete(self, i): # 在线性表中删除序号i位置的元素
裁判测试程序样例:
class LinkNode: # 单链表结点类
def __init__(self, data=None): # 构造函数
self.data = data # data属性
self.next = None # next属性
class LinkList: # 单链表类
def __init__(self): # 构造函数
self.head = LinkNode() # 头结点head
self.head.next = None
def geti(self, i): # 返回序号为i的结点
p = self.head
j = -1
while j < i and p is not None:
j += 1
p = p.next
return p
def Add(self, e): # 在线性表的末尾添加一个元素e
s = LinkNode(e) # 新建结点s
p = self.head
while p.next is not None: # 查找尾结点p
p = p.next
p.next = s; # 在尾结点之后插入结点s
def getsize(self): # 返回长度
p = self.head
cnt = 0
while p.next is not None: # 找到尾结点为止
cnt += 1
p = p.next
return cnt
def __getitem__(self, i): # 求序号为i的元素
assert i >= 0 # 检测参数i正确性的断言
p = self.geti(i)
assert p is not None # p不为空的检测
return p.data
def __setitem__(self, i, x): # 设置序号为i的元素
assert i >= 0 # 检测参数i正确性的断言
p = self.geti(i)
assert p is not None # p不为空的检测
p.data = x
def GetNo(self, e): # 查找第一个为e的元素的序号
j = 0
p = self.head.next
while p is not None and p.data != e:
j += 1 # 查找元素e
p = p.next
if p is None:
return -1 # 未找到时返回-1
else:
return j # 找到后返回其序号
def display(self): # 输出线性表
p = self.head.next
while p is not None:
print(p.data, end=' ')
p = p.next;
print()
/* 你的代码将放在这里 */
/* 你的代码将放在这里 */
if __name__ == '__main__':
L = LinkList()
for i in range(1, 6):
L.Add(i)
print("L: ", end=''), L.display()
print("在序号0前增加元素9")
L.Insert(0,9)
print("L: ", end=''), L.display()
print("删除序号1的元素")
L.Delete(1)
print("L: ", end=''), L.display()
输入样例:
在这里给出一组输入。例如:
没有输入
输出样例:
在这里给出相应的输出。例如:
L: 1 2 3 4 5
在序号0前增加元素9
L: 9 1 2 3 4 5
删除序号1的元素
L: 9 2 3 4 5
Python解析:
def Insert(self, i, e): # 在线性表中序号i位置插入元素e
t=LinkNode()
t.Add(9)
t.next=self.next
self.next=t
def Delete(self, i): # 在线性表中删除序号i位置的元素
self.next= not self.next