【问题标题】:How to find middle element of doubly linked list using head and tail?如何使用头尾找到双向链表的中间元素?
【发布时间】:2018-04-17 08:07:18
【问题描述】:

有没有一种方法可以使用头尾找到双向链表的中间元素。我尝试从起始节点遍历到下一个元素,从结束节点遍历到前一个元素,并检查两者的引用是否相同。如果列表中有奇数个元素,这可以正常工作。如果列表中的元素数量是偶数,我无法找到何时应该停止。

while(head.next != end.previous) {
    head = head.next;
    end = end.previous;
}

【问题讨论】:

  • 指向你的双向链表的指针在哪个/在哪里?
  • n/2 可以是列表的中间位置。
  • 如果节点数是偶数,则没有中间节点。你能做的最好的就是报告两个节点。
  • @TimBiegeleisen:我们如何获得这些节点?
  • 另外,这里还有一个问题。如果两个节点存储完全相同的对象,那么它们的引用可能相等。所以即使是一个奇怪的列表,你的算法也可能会失败。

标签: data-structures linked-list


【解决方案1】:

一种方法是:

以指针 x 开头,指针 y 结尾。重复执行以下步骤:

  1. 如果 x=y,则停止。

  2. 前进 x 前进。

  3. 如果 x=y,则停止。

  4. 向后前进。

这应该适用于偶数和奇数长度。但它也需要 2 次比较和假设所有引用都是唯一的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2017-02-25
    • 2018-01-27
    • 1970-01-01
    • 2021-11-17
    • 2020-12-10
    相关资源
    最近更新 更多