【问题标题】:How to delete last Node of the list using next如何使用 next 删除列表的最后一个节点
【发布时间】:2021-11-01 13:46:03
【问题描述】:

我尝试从列表中删除最后一个节点,但无论我如何扭曲它都会出现以下错误:--- 第 108 行,在 remove_last before.nxt = 删除.nxt AttributeError: 'NoneType' 对象没有属性 'nxt'---

这是我的代码:

@dataclass
class Node:
   value: int = None
   nxt: Any = None  


 @dataclass
 class Deque:
     head: Node = None      
     tail: Node = None      
     size: int = 0

     def remove_last(self):
        if self.head is None:
            print("empty queue")
            return None
        else:
            before = self.head
            for i in range(self.size-1):
               before = before.nxt
            delete = before.nxt
            before.nxt = delete.nxt
            self.size -= 1
            return before.value

为什么我不能下一个申请?

【问题讨论】:

  • 请修正你的缩进。
  • 你到底是什么意思?
  • 我假设remove_lastDeque 类的一个方法。正如你所展示的,它不是。此外,每个级别都有 3/4 个空间。
  • 此处已修复,缩进正确

标签: python python-3.x list


【解决方案1】:

我想你算错了,忘记了单例情况:

def remove_last(self):
    if self.head is None:  # empty
        print("empty queue")
        return None
    if self.head is self.tail:  # one element (there can still be no `before`)
        val = self.head.value
        self.head = self.tail = None
        self.size = 0 
        return val
    before, delete = self.head, self.head.nxt
    while delete.nxt:  # why rely on size (but it should be size-2 iterations)
       before, delete = before.nxt, delete.nxt
    before.nxt = None
    self.size -= 1
    return delete.value

如 cmets 所示,一般情况下需要 size-2 迭代。最简单的情况:2 个元素,那么 before 将是 self.head,这意味着 0 迭代。

【讨论】:

  • before.nxt = delete.None, SyntaxError: invalid syntax 出现错误
  • 修复了这个问题。 Nonedelete.nxt(无论如何都必须是 None
  • while delete.nxt: # 为什么要依赖大小(但应该是 size-2 迭代) AttributeError: 'NoneType' object has no attribute 'nxt'
  • 那么,你在另一种方法中有一些错误,因为这意味着self.head.nxtNone,尽管头和尾不是同一个节点。
【解决方案2】:

我就是这样解决的。没有,因为我在最后一个节点之后跳转到下一个节点,该节点不存在

      else:
        node = self.head
        for i in range(self.size-2):
           node = node.nxt
        node.nxt = None
       

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 2013-03-25
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多