Data structures 如何使用head和tail查找双链表的中间元素?

Data structures 如何使用head和tail查找双链表的中间元素?,data-structures,linked-list,Data Structures,Linked List,有没有一种方法可以使用head和tail找到双链表的中间元素。我尝试从起始节点遍历到下一个元素,从结束节点遍历到上一个元素,并检查两者的引用是否相同。如果列表中的元素数量为奇数,则此操作非常有效。如果列表中的元素数为偶数,我无法找到何时停止 while(head.next != end.previous) { head = head.next; end = end.previous; } 一种方法是: 以指针x开头,指针y结尾。重复执行以下步骤: 如果x=y,则停止 向前推进x

有没有一种方法可以使用head和tail找到双链表的中间元素。我尝试从起始节点遍历到下一个元素,从结束节点遍历到上一个元素,并检查两者的引用是否相同。如果列表中的元素数量为奇数,则此操作非常有效。如果列表中的元素数为偶数,我无法找到何时停止

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

一种方法是:

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

  • 如果x=y,则停止

  • 向前推进x

  • 如果x=y,则停止

  • 前进或后退


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

    指向双链接列表的指针是什么/在哪里?n/2可以是列表的中间。如果节点数为偶数,则没有中间节点。您最多只能报告两个节点。@TimBiegeleisen:我们如何获得这些节点?此外,这里还有另一个问题。如果两个节点存储完全相同的对象,则它们的引用可能相等。因此,即使是奇数列表,您的算法也可能失败。