class LNode :
def init(self, elm, nxt):
self.elem = elm
self.next = nxt
class LList:
def init(self):
self.head = LNode(None, None)
def isEmpty(self): #判断单链表是否为空
return self.head.next is None
def prepend(self, elem): #在头结点之后插入结点
self.head.next = LNode(elem, self.head.next)
def insert(self, i ,elem): #在位置i处插入结点
pos = 0
if i < 1:
raise IndexError
p = self.head
while p.next is not None:
q = p
##### Fill in Your Code #####
if pos == i:
##### Fill in Your Code #####
return
raise IndexError
def append(self, elem): #在单链表末尾插入结点
if self.isEmpty():
self.head.next = LNode(elem, None)
return
p = self.head
while p.next is not None:
##### Fill in Your Code #####
p.next = LNode(elem, None)
def pop(self): #删除第一个结点(头结点的下一个结点)
if self.isEmpty():
raise ValueError
e = self.head.next.elem
##### Fill in Your Code #####
return e
def remove(self,i): #删除位置i的结点,可用for循环或while循环
pos = 0
if i < 1:
raise IndexError
p = self.head
while p.next is not None:
q = p
p = p.next
pos += 1
if pos == i:
##### Fill in Your Code #####
p.next = None
return
raise IndexError
def poplast(self): #删除最后一个结点
if self.isEmpty(): # empty list
raise ValueError
p = self.head.next
if p.next is None: # list with only one element
e = p.elem
##### Fill in Your Code #####
return e
while p.next.next is not None: # till p.next be last node
##### Fill in Your Code #####
e = p.next.elem; p.next = None
return e
def find(self, elem): #在单链表中查找elem
p = self.head.next
while p is not None:
if elem == p.elem:
return p.elem
##### Fill in Your Code #####
return None
def printall(self): #打印输出单链表的所有元素
p = self.head.next
while p is not None:
print(p.elem,end = ' ')
p = p.next
if name == 'main':
mlist1 = LList()
for i in range(10):
mlist1.prepend(i)
mlist1.printall()
print(' ')
mlist1.insert(2,100)
mlist1.printall()
print(' ')
mlist1.remove(9)
mlist1.printall()
print(' ')
mlist1.remove(2)
mlist1.printall()