【问题标题】:Creating dummy nodes for leetcode LinkedList questions为 leetcode 链表问题创建虚拟节点
【发布时间】:2022-01-01 01:14:06
【问题描述】:

我看到很多 Leetcode LinkedList 问题的解决方案都涉及创建一个虚拟节点,例如 Example

在我看来,构造这个额外的 ListNode 对象并不是什么大问题,更重要的是,它大大简化了代码。但是,在我的学校,创建这种额外的对象会受到严重惩罚。

我只是想知道,在实际的行业工作中可以接受创建这个额外的虚拟节点吗?它使代码更加简洁,但在技术上使用了额外的资源

【问题讨论】:

  • 注意:示例链接仅供 Leetcode 订阅者访问。您可能会使用(并在您的问题中引用)另一个示例。
  • 在你的学校,如果他们给你一个链表作业,包括在链表上实现一个长度方法,并要求你计算一个空链表的长度,它会如何工作?

标签: linked-list nodes


【解决方案1】:

在实际的行业工作中可以接受创建这个额外的虚拟节点吗?

是的。尽管我能想到的例子并不多,但我可以在生产代码中使用链表并且必须自己实现链表数据结构(而不​​是使用编程提供的实现)语言或附带的标准库)。

它使代码更加简洁

是的

...但在技术上正在使用额外的资源。

可以,但不会超过在代码中使用两个附加变量的情况。所以这不是一个真正的问题。一个虚拟节点表示 O(1) 辅助空间,无论如何您都可以使用它来使用节点指针/引用遍历链表。

在我的学校,创建这种额外的对象会受到严重处罚。

太糟糕了。

【讨论】:

  • 这不是比你在这里暗示的更重要吗?如果没有额外分配,我怎么知道空列表和 null 之间的区别?
  • 那更多的是与使用的数据结构有关的问题。在 LeetCode 上,大多数(如果不是全部)链表问题通过头节点引用表示一个列表,因此空列表和 null 之间没有区别。如果有一个单独的 LinkedList 类实例(恕我直言,比虚拟节点更好),具有头节点成员,那么您可以区分空列表或空引用。
  • 没有这个区别,我不能给你一个空列表来填写。我想我会说,在玩具问题域之外,无论是否 OOP,我们分配 一个代表空状态的退化事物。我很难想象一所学校会以其他方式教学。
  • @danh, “我不能给你一个空列表来填充”:实际上你可以使用支持引用调用的语言,比如 C++。这些是编程语言的细节,提问者并没有用特定的编程语言标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
相关资源
最近更新 更多