永恒的蓝色梦想 发表于 2020-4-6 13:34:34

链表 - LinkedList

本帖最后由 永恒的蓝色梦想 于 2020-4-6 13:39 编辑

class node:
    def __init__(self,value,next=None):
      self.value=value
      self.next=next

class LinkedList_iterator:
    def __init__(self,start,/):
      self.__val=start

    def __iter__(self):
      return self

    def __next__(self):
      if self.__val:
            temp=self.__val
            self.__val=temp.next
            return temp.value

      raise StopIteration

class LinkedList:
    def __init__(self,value=None,/):
      if value is None:
            self.__isempty=True
            self.__start=self.__end=None
            self.__len=0

      else:
            self.__start=None
            self.__isempty=True

            for i in value:
                self.append(i)

            self.__2empty()

    @property
    def start(self):
      if self.__isempty:
            return None

      else:
            return self.__start.value

    @property
    def end(self):
      if self.__isempty:
            return None

      else:
            return self.__end.value

    def __bool__(self):
      return not self.__isempty
   
    def __repr__(self):
      return 'LinkedList(['+', '.join((repr(i) for i in self.__iter__()))+'])'

    def __str__(self):
      return ' -> '.join((repr(i) for i in self.__iter__()))

    def __iter__(self):
      return LinkedList_iterator(self.__start)

    def __2empty(self):
      if self.__start is None:
            self.__end=None
            self.__isempty=True

    def extendleft(self,value,/):
      for i in value:
            self.appendleft(i)

    def extend(self,value,/):
      for i in value:
            self.append(i)

    def append(self,value,/):
      if self.__isempty:
            self.__start=self.__end=node(value)
            self.__isempty=False
            self.__len=1

      else:
            self.__end.next=self.__end=node(value)
            self.__len+=1

    def appendleft(self,value,/):
      if self.__isempty:
            self.__isempty=False
            self.__start=self.__end=node(value)
            self.__isempty=False
            self.__len=1
   
      else:
            self.__start=node(value,self.__start)
            self.__len+=1

    def popleft(self,/):
      if self.__isempty:
            raise IndexError("pop from empty LinkedList")

      temp=self.__start
      self.__start=temp.next
      self.__2empty()
      return temp.value如果代码有问题,欢迎在评论区指正!{:10_323:}

zltzlt 发表于 2020-4-6 13:36:34

popleft 貌似有问题

永恒的蓝色梦想 发表于 2020-4-6 13:40:05

zltzlt 发表于 2020-4-6 13:36
popleft 貌似有问题

感谢指正

测试的时候在IDLE里改了,忘了在vscode里改了……{:10_262:}
页: [1]
查看完整版本: 链表 - LinkedList