双向链表的中位数

Median of a doubly linked list

本文关键字:中位数 双向链表      更新时间:2023-10-16

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

运行时间: O(n)空间复杂度 O(n) 也是如此。

有没有更有效的方法呢?

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

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

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

现在,遍历列表,其中 p1 前进

2 次,p1 前进一次,直到 p2 到达列表末尾。

当 p1 遍历完整列表时,p2 将遍历列表的一半,从而指向列表的"中间"。