classerror(Exception):def __init__(self,msg):
super(error,self).__init__()
self.msg=msgdef __str__(self):returnself.msgclassNode:def __init__(self,ele):
self.ele=ele
self.next=Noneclassmylist:def __init__(self,ele=None):
self.index=0
self.pos=0ifele:
self._head=Node(ele)else:
self._head=Nonedef __iter__(self):returnselfdef __next__(self):if self.pos
self.pos+= 1cursor=self._head
current=cursor
num=0while cursor !=None:
current=cursor
cursor=cursor.next
num+= 1
if num ==self.pos:returncurrent.eleelse:raiseStopIterationdefempty(self):return self._head==Nonedefadd(self,item):
node=Node(item)
node.next=self._head
self._head=nodedeflength(self):
cur=self._head
num=0ifcur:
num+=1
whilecur.next:
cur=cur.next
num+=1
returnnumelse:returnnumdefappend(self,item):
node=Node(item)
cursor=self._headifself.empty():
self._head=nodeelse:while cursor.next!=None:
cursor=cursor.next
cursor.next=nodedefpop(self):ifself.empty():returnNoneelse:if self.length()==1:
ele=self._head.ele
self._head.ele=Nonereturneleelse:
cur=self._head
current=curwhile cur.next!=None:
current=cur
cur=cur.next
ele=cur.ele
current.next=Nonereturneledefinsert(self,index,item):if index<0 or index>self.length():raise error("out of range")else:if index==0:
self.add(item)elif index==self.length():
self.append(item)else:
node=Node(item)
cur=self._head
pre=0while pre
cur=cur.next
pre+=1node.next=cur.next
cur.next=nodedefget(self,index):if index<0 or index>self.length()-1:raise error("out of range")else:
num=0
cur=self._headwhile num
cur=cur.next
num+=1
returncur.eledefremove(self,item):
cur=self._head
pre=Nonewhile cur!=None:if cur.ele==item:if pre==None:
self._head=cur.nextelse:
pre.next=cur.nextbreak
else:
pre=cur
cur=cur.nextdefdelete(self,index):if index<0 or index>self.length()-1:raise error("out of range")else:if index==0:
self._head=self._head.nextelse:
num=1current=self._head
cur=current.nextwhile num!=index:
current=cur
cur=current.next
num+=1current.next=cur.next
cur.ele=None
cur.next=None