请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,我不太懂为什么链表类中每个方法都要返回node,好像最后并没有接收这个node,还有我这个语句不报错,但没打印东西

#! -*- encoding=utf-8 -*-

class Node:
    def __init__(self,key,value):
        self.key=key
        self.value=value
        self.prev=None
        self.next=None

    def __str__(self):
        val="{%d: %d}"%(self.key,self.value)
        return val
    def __repr__(self):
        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.tail=node
            self.head=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_tail(self):
        if not self.tail:
            return
        node =self.tail
        if node.prev:
            self.tail=node.prev
            self.tail.next=None
        else:
            self.head=self.tail=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 __remove(self,node):
        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
    #弹出头部节点
    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.__remove(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[0])
    l.print()
    l.append(nodes[1])
    l.print()
    l.append(nodes[2])
    l.print()
    l.pop()
    l.print()
    l.remove(nodes[2])
    l.print()

正在回答

1回答

关于操作链表返回node其实是写相关函数的一个最佳实践,虽然在这里没有使用到node,但是难保以后在使用相关函数的时候不会用到,因此这是一种较为优雅的代码书写风格。

希望对你有所帮助。

1 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕粉3028671 #1
    谢谢 不过麻烦老师再帮我看一下这里print ()和__str__相关语句有什么问题,因为最后没有打印东西 也没报错
    回复 有任何疑惑可以回复我~ 2019-07-05 22:42:47
  • 咚咚呛 回复 提问者 weixin_慕粉3028671 #2
    没有执行到main函数,if __name__ == 'main'错了。
    应该为if __name__ == '__main__'
    回复 有任何疑惑可以回复我~ 2019-07-05 22:52:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信