双重链表的中位数

时间:2015-03-09 03:48:25

标签: c++ linked-list

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

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

有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

相关问题