双向链表的中位数

Median of a doubly linked list

给定一个排序的双向链表,你将如何找到中间元素?我能想到的一种方法是遍历一次列表,一旦一个值重复,我们就知道我们已经遍历了整个链表。在他看来,我们知道有多少个元素,所以我们可以取中位数,因为它已经排序了,这将是:

运行 时间:O(n) space 复杂度也为 O(n)。

有没有更有效的方法?

  1. 1.Have 2 个指向 link 列表开头的指针 p1 和 p2
  2. 将起始节点的值存储在某个临时变量中
  3. p2每前进2个节点,p1应该前进1个节点。继续 直到 p2->next 是重复节点
  4. 这样循环结束时,p2在最后一个节点,p1在中间节点。

您可以使用 2 个指针 p1 和 p2 来实现。

最初这 2 个指针将指向列表的头部。

现在,遍历List,其中p1前进2次,p1前进1次,直到p2到达List的末尾。

当p1遍历完整的List时,p2就遍历了一半的List,从而指向List的"Mid"