【问题标题】:How to fix this. Returning wrong number of list size如何解决这个问题。返回错误的列表大小数
【发布时间】:2019-07-24 19:06:29
【问题描述】:

此队列代码必须返回列表的确切头部、尾部和大小。它返回正确的头部和尾部,但大小不正确。

class Queue:
    '''
        >>> x=Queue()
        >>> x.isEmpty()
        True
        >>> x.dequeue()
        'Queue is empty'
        >>> x.enqueue(1)
        >>> x.enqueue(2)
        >>> x.enqueue(3)
        >>> x.dequeue()
        1
        >>> print(x)
        Head:Node(2)
        Tail:Node(3)
        Queue:2 3
    '''
    def __init__(self): 
        # You can add a count variable
        self.head=None
        self.tail=None

    def __str__(self):
        temp=self.head
        out=[]
        while temp:
            out.append(str(temp.value))
            temp=temp.next
        out=' '.join(out)
        return ('Head:{}\nTail:{}\nQueue:{}'.format(self.head,self.tail,out))

    __repr__=__str__

    def isEmpty(self):
        #write your code here
        if self.head == None:
            return True
        else:
            return False

    def __len__(self):
        #write your code here
        node_count = 1
        current_node = self.head
        while current_node != None:
            current_node = current_node.next
            node_count += 1
            return node_count
        else:
            return node_count

    def enqueue(self, value):
        #write your code here
        new_node = Node(value)
        if self.isEmpty():
            self.head = new_node
            self.tail = new_node
        else:
            self.tail.next = new_node
            self.tail = new_node



    def dequeue(self):
        #write your code here
        if self.isEmpty():
            return 'Queue is empty'
        else:
            old_top_node = self.head
            new_top_node = self.head.next
            self.head = new_top_node
            return old_top_node.value

预期:[12,8,11,5],head=12,tail=5 和 size 4

实际输出:[12, 8, 11, 5], head=12, tail=5 and size 2

【问题讨论】:

  • 你做了什么调试?你把问题缩小到了哪里?不过,从 1 开始 node_count 似乎是错误的。

标签: python queue


【解决方案1】:

我觉得这是你的问题,问题源于你首先从 1 开始 node_count 因为如果没有节点,那么即使它应该是 0,你最终仍然会得到 1 的计数。另一件事是您使用的 return 将完全退出该功能。相反,使用 continue 它将只是迭代回到循环的顶部,如果没有节点,它会在返回 node_count 之后跳过循环并返回 0 否则它将返回您正在寻找的大小

 def __len__(self):
            node_count = 0
            current_node = self.head
            while current_node != None:
                current_node = current_node.next
                node_count += 1
                contuine
            return node_count

【讨论】:

    【解决方案2】:

    如果您查看__len__(self) 方法的定义:

       def __len__(self):
            #write your code here
            node_count = 1
            current_node = self.head
            while current_node != None:
                current_node = current_node.next
                node_count += 1
                # --- HERE ---
                return node_count
            else:
                return node_count
    

    您在第一次迭代期间返回该值,因此它始终为 2(如果 current_node 为 None,则为 1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2019-06-22
      • 2013-11-23
      • 2021-07-01
      相关资源
      最近更新 更多