sun_1997 发表于 2021-3-20 18:18:34

python3 双向链表问题

class Node:#实现了链表节点的类
    def __init__(self,key,value):
      self.key=key
      self.value=value
      self.next=None
      self.prev=None#上一个节点的引用为空

    def __str__(self):#直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了
      val='{%d: %d}' % (self.key,self.value)
      return val

    def __repr__(self):#重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
      val = '{%d: %d}' % (self.key, self.value)
      return val


class DoubleLinkedList:
    def __init__(self,capacity=0xffff):
      self.capacity=capacity
      self.head=None
      self.tail=None
      self.size=0   #实现了双向链表

    #从头部添加
    def __add_head(self,node):
      if not self.head:
            self.head=node
            self.tail=node
            self.head.next=None
            self.head.prev=None
      else:
            node.next=self.head
            self.head.prev=node
            self.head=node
            self.head.prev=None
      self.size += 1
      return node#返回增加的节点
    #从尾部添加
    def __add_tail(self,node):
      if not self.tail:
            self.head=node
            self.tail = node
            self.tail.next=None
            self.tail.prev=None
      else:
            self.tail.next=node
            node.prev=self.tail
            self.tail = node
            self.tail.next=node
      self.size += 1
      return node #返回当前添加的节点


    def __del_head(self):
      if not self.head:
            return
      node=self.head
      if node.next:
            self.head=node.next
            self.head.prev=None
      else:
            self.tail=self.head=None
      self.size-=1
      return node



    def __del_tail(self):#私有的函数
      if not self.tail:
            return #直接返回
      node=self.tail
      if node.prev:
            self.tail=node.prev
            self.tail.next= None
      else:
            self.tail=self.head=None
      self.size-=1
      return node

    #删除任意节点
    def __remov(self,node):
      #如果node==None,默认删除尾部节点
      if not node:
            node=self.tail
      if node == self.tail:
            self.__del_tail()
      elif node==self.head:
            self.__del_head()
      else:
            node.prve.next=node.next
            node.next.prve=node.prev
            self.size-=1
      return node


    #封装5个对外的api
    #弹出头部节点
    def pop(self):#公有的函数
      return self.__del_head()

    def append(self,node):
      return self.__add_tail(node)

    def append_front(self,node):
      return self.__add_head(node)

    def remove(self,node=None):
      return self.__remov(node)
    def print(self):
      p = self.head#用一个属性指向当前头部
      line = ''
      while p:
            line +='%s' % p
            p = p.next
            if p:
                line += '=>'
      print(line)

if __name__ == '__main__':
    l = DoubleLinkedList(10)
    nodes= []
    for i in range(10):
      node = Node(i,i)
      nodes.append(node)

    l.append(nodes)
    l.print()
    l.append(nodes)
    l.print()
    l.pop()
    l.print()
    l.append(nodes)
    l.print()
    l.append_front(nodes)
    l.print()
    l.append(nodes)
    l.print()
    l.remove(nodes)
    l.print()
    l.remove()
    l.print()









结果只输出{0:0}   

为何只能后面的代码都不输出了

sun_1997 发表于 2021-3-20 19:05:57

class Node:#实现了链表节点的类
    def __init__(self,key,value):
      self.key=key
      self.value=value
      self.next=None
      self.prev=None#上一个节点的引用为空

    def __str__(self):#直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了
      val='{%d: %d}' % (self.key,self.value)
      return val

    def __repr__(self):#重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
      val = '{%d: %d}' % (self.key, self.value)
      return val


class DoubleLinkedList:
    def __init__(self,capacity=0xffff):
      self.capacity=capacity
      self.head=None
      self.tail=None
      self.size=0   #实现了双向链表

    #从头部添加
    def __add_head(self,node):
      if not self.head:
            self.head=node
            self.tail=node
            self.head.next=None
            self.head.prev=None
      else:
            node.next=self.head
            self.head.prev=node
            self.head=node
            self.head.prev=None
      self.size += 1
      return node#返回增加的节点
    #从尾部添加
    def __add_tail(self,node):
      if not self.tail:
            self.head=node
            self.tail = node
            self.tail.next=None
            self.tail.prev=None
      else:
            self.tail.next=node
            node.prev=self.tail
            self.tail = node
            self.tail.next=None
      self.size += 1
      return node #返回当前添加的节点


    def __del_head(self):
      if not self.head:
            return
      node=self.head
      if node.next:
            self.head=node.next
            self.head.prev=None
      else:
            self.tail=self.head=None
      self.size-=1
      return node



    def __del_tail(self):#私有的函数
      if not self.tail:
            return #直接返回
      node=self.tail
      if node.prev:
            self.tail=node.prev
            self.tail.next= None
      else:
            self.tail=self.head=None
      self.size-=1
      return node

    #删除任意节点
    def __remov(self,node):
      #如果node==None,默认删除尾部节点
      if not node:
            node=self.tail
      if node == self.tail:
            self.__del_tail()
      elif node==self.head:
            self.__del_head()
      else:
            node.prev.next=node.next
            node.next.prev=node.prev
            self.size-=1
      return node


    #封装5个对外的api
    #弹出头部节点
    def pop(self):#公有的函数
      return self.__del_head()

    def append(self,node):
      return self.__add_tail(node)

    def append_front(self,node):
      return self.__add_head(node)

    def remove(self,node=None):
      return self.__remov(node)
    def print(self):
      p = self.head#用一个属性指向当前头部
      line = ''
      while p:
            line +='%s' % p
            p = p.next #此时self.head是Node实例
            if p:
                line += '=>'
      print(line)

if __name__ == '__main__':
    l = DoubleLinkedList()
    nodes= [] #nodes=
    for i in range(10):
      node = Node(i,i)
      nodes.append(node)

    l.append(nodes)
    l.print()
    l.append(nodes)
    l.print()
    l.pop()
    l.print()
    l.append(nodes)
    l.print()
    l.append_front(nodes)
    l.print()
    l.append(nodes)
    l.print()
    l.remove(nodes)
    l.print()
    l.remove()
    l.print()


解决了
页: [1]
查看完整版本: python3 双向链表问题