利用链表的思想来实现list

class error(Exception):
    def __init__(self,message):
        super(error,self).__init__()
        self.message=message
    def __str__(self):
        return "out of range"
class Node():#节点
    def __init__(self,ele=None):#头节点为空
        self.ele=ele  #节点的值
        self.next=None   #节点的下一个
class mylist():
    def __init__(self,node=None):  #列表本身
        self._head=node
        self.pos=0
    def empty(self):
        return self._head==None
    def add(self,item):
        node=Node(item)
        node.next=self._head
        self._head=node
    def length(self):
        cursor=self._head
        num=0
        while cursor!=None:
            cursor=cursor.next
            num+=1
        return num
    def append(self,item):
        node=Node(item)
        if self.empty():
            self._head=node
        else:
            cursor=self._head
            while cursor.next!=None:
                cursor=cursor.next
            cursor.next=node
    def get(self,index):
        if index<0 or index>self.length()-1:
            raise error("out of range")
        else:
            num=0
            cursor=self._head
            while num<index:
                cursor=cursor.next
                num+=1
            return cursor.ele
    def insert(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)
                cursor=self._head
                prev=0
                while prev<index-1:
                    cursor=cursor.next
                    prev+=1
                node.next=cursor.next
                cursor.next=node
    def pop(self):
        if self.empty():
            return None
        else:
            if self.length()==1:
                ele=self._head.ele
                self._head=None
                return ele
            cursor=self._head
            while cursor.next!=None:#[a,b],cursor=a
                current=cursor
                cursor=cursor.next
            ele=cursor.ele
            current.next=None
            return ele
    def remove(self,item):
        cursor=self._head
        pre=None
        while cursor!=None:#[a,b],cursor=b
            if cursor.ele==item:
                if not pre: #只有一个元素
                    self._head=cursor.next
                else: #有多个元素
                    pre.next=cursor.next
                break
            else: #[]a,b,c]
                pre=cursor
                cursor=cursor.next
    def delete(self,index):
        if index<0 or index>self.length()-1:
            raise error("out of range")
        else:
            if index==0:
                cursor=self._head
                self._head=cursor.next
            else:
                cursor=self._head
                num=0
                while num<index:
                    pre=cursor
                    cursor=cursor.next
                    num+=1
                pre.next=cursor.next

    def __iter__(self):
        return self
    def __next__(self):
        if self.pos < self.length():
            self.pos += 1
            cursor = self._head
            current=cursor
            num = 0
            while cursor != None:#循环[a,b,c]
                current = cursor
                cursor = cursor.next
                num += 1
                if num == self.pos:
                    return current.ele
        else:
            raise StopIteration



arr=mylist()
arr.append("a")
arr.append("b")
arr.append("c")
arr.append("d")
arr.insert(4,"e")
for i in arr:
    print(i)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值