如何解决tail 在链接结构中如何工作?
我是编程新手,正在使用 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 ,它会将 newNode 添加到 tail 和 head 中。当我添加第二个元素时问题就开始了:我不明白为什么将第二个元素添加到之前添加的元素中,同时与self._tail
这行代码self._tail.next = newNode
被执行。在这行代码之后,self._tail
成为第二个元素,这看起来很合乎逻辑,因为我必须在不断添加元素时继续跟踪尾部,而 self._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
我希望我的问题足够清楚。我非常感谢你的时间。谢谢!
解决方法
在这行代码之后,self._tail 成为第二个元素,这看起来很合乎逻辑,因为我必须继续跟踪尾部,因为我不断添加元素,而 self._head 现在有两个元素,但在代码中没有向 self._head 添加新元素的代码行。
我认为您在这里可能缺少的是 self._head 本身并不是一个 Bag,而是一个指向 _BagListNode 对象的指针。
当新物品被添加到包中时,它们作为下一个节点贴在前一个尾部,成为新的尾部。这根本不会影响您的实现中的头部。另一种可能更清晰的实现可以简单地将一个项目作为列表的新头部,如下图所示:
我的数据结构教授给我的一个技巧是画一幅正在发生的事情的图,以提高你的直觉理解。您可以考虑画一张图,说明将第三件物品插入袋子时会发生什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。