当前位置: 首页 > 知识库问答 >
问题:

tail如何在链接结构中工作?

微生嘉
2023-03-14

我是编程新手,正在使用Python学习更复杂的数据结构,我发现很难理解使用头和尾向链表添加元素的概念。

class Bag:
    def __init__(self):
        self._head = None
        self._tail = None
        self._size = 0


 def add(self, item):
        newNode = _BagListNode(item)
        if self._head is None:
            self._head = newNode
        else:
            self._tail.next = newNode
        self._tail = newNode
        self._size += 1

class _BagListNode(object):
    def __init__(self, item):
        self.item = item
        self.next = None
    def __repr__(self):
        return f"{self.item}"

关键是当我添加第一个元素时,一切都清楚了。由于head一开始是None,它将向tail和head添加新节点。当我添加第二个元素时,问题就开始了:我不明白为什么第二个元素会与self同时添加到之前添加的元素中_尾部当这行代码self时_尾执行next=newNode。在这行代码之后,self_tail成为第二个元素,这似乎很符合逻辑,因为我必须在不断添加元素和self时跟踪tail_head现在有两个元素,但是在代码中没有代码行,在那里可以self_head添加了一个新元素。

例如:

bag = Bag()
    bag.add(1)
    bag.add(2)
    bag.add(3)
print(bag._head.item, bag._head.next.item, bag._head.next.next.item)

结果是:

1 2 3

我希望我的问题足够清楚。我非常感谢你的时间。谢谢你!

共有1个答案

路金鑫
2023-03-14

在这行代码之后,self_tail成为第二个元素,这看起来很合乎逻辑,因为我必须在不断添加元素和self的同时跟踪tail_head现在有两个元素,但在代码中并没有代码行_head添加了一个新元素。

我想你在这里可能缺少的是那个自我_head本身不是一个包,而是指向_BagListNode对象的指针。

当新项目添加到袋子上时,它们将作为前一个尾部上的下一个节点附着,成为新的尾部。在您的实现中,这根本不会影响头部。另一种可能更清晰的实现方法是将一个项目作为列表的新标题,如下图所示:

我的数据结构教授给我的一个技巧是画一幅正在发生的事情的图片,以提高你的直觉理解。你可以考虑画一个图片,当第三个项目被插入袋子中时会发生什么。

 类似资料:
  • 问题内容: 用Java创建链接列表的最佳方法是什么? 问题答案: 对于熟悉Java的开发人员来说,显而易见的解决方案是使用java.util中已经提供的LinkedList类。说,但是,由于某种原因,你想进行自己的实现。这是一个链接列表的快速示例,该链接列表在列表的开头插入新链接,从列表的开头删除并循环浏览列表以打印其中包含的链接。对此实现的增强包括使其成为双向链接列表,添加从中间或结尾插入和删除

  • 问题内容: 我不是在问什么合适的链接语法,我知道它可能是这样的: 但是,我真的很想了解它的内部工作,据我所知,链接是与其他著名框架相比的优势之一,但是对于像我这样的新手程序员来说,这是很多抽象的东西,我敢肯定在那里可以提供一个解释,让我了解链接的工作方式。 谢谢! 问题答案: 如果您的对象具有某些方法,并且每个方法都返回带有方法的对象,则只需从返回的对象中调用一个方法。

  • 我想从JSON响应中添加链接:https://xxx.xxx/posters/poster.jpg,这里是我的代码: 下面是JSON响应: 如何让它变成这样:

  • 谁能给我解释一下这个吗?

  • 问题内容: 我正在分析存储过程中的一些旧SQL代码。 等等… 等等… 所以我想知道当它们都在同一个select语句中时,这些赋值如何工作。我假设在调用select之后,Var2 = OldValue,但是我想确定。 围绕这种情况有哪些规则?分配是否按照声明的顺序执行?如果是这样,在以下情况下将为Var2分配什么值: 谢谢! 问题答案: 退货 因此,在这种情况下,它们以从左到右的顺序执行, 但这 不

  • 问题内容: 我想知道Java链接器如何工作。具体来说,它将类,接口,包,方法等以何种顺序组合为jvm可执行格式。我在这里找到了一些信息,但是关于链接顺序的信息并不多。 问题答案: 没有Java“链接器”之类的东西。但是,存在类加载器的概念,该类加载器给出了“某处”中的java字节代码数组,可以创建类的内部表示形式,然后可以与etc 一起使用。 在这种情况下,接口只是特殊的类。加载类后,方法和字段将