双向链表的中位数
Median of a doubly linked list
给定一个排序的双向链表,您将如何找到中位数元素?我能想到的一种方法是遍历列表一次,一旦值重复,我们知道我们已经遍历了整个链表。在他的观点中,我们知道有多少元素,所以我们可以去中位数,因为它已经排序了,这将是:
运行时间: O(n)空间复杂度 O(n) 也是如此。
有没有更有效的方法呢?
- 1.有 2 个指向链接列表开头的指针 p1 和 p2
- 将开始节点的值存储在某个临时变量中
- 对于 P2 前进的每 2 个节点,P1 应前进 1 个节点。继续这个直到 P2->Next 是重复节点
- 这样,当这个循环结束时,p2 将在最后一个节点,p1 将在中间节点。
您可以使用 2 个指针 p1 和 p2 来实现此目的。
最初,2 个指针将指向列表的头部。
现在,遍历列表,其中 p1 前进2 次,p1 前进一次,直到 p2 到达列表末尾。
当 p1 遍历完整列表时,p2 将遍历列表的一半,从而指向列表的"中间"。
相关文章:
- 在 c++ 中具有向量的双向链表构造函数
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 在双向链表中实现 Popback
- 在C++中反转双向链表
- 插入到双向链表中的特定位置
- 如何在双向链表的网格中旋转列
- 在给定节点之后插入双向链表中的节点
- 在双向链表中给定节点之后删除节点
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 双向链表中的 AddToTail 函数会导致核心转储
- 我如何能够访问双向链表中的嵌套结构
- 为什么我的函数没有打印出双向链表中的第一个节点?
- 使用类从双向链表中删除节点
- 删除双向链表 (C++) 中的节点
- 双向链表中的比较函数
- 双向链表删除C++中的偶数
- 使用双向链表中的指针交换节点
- 在双向链表中插入元素
- 双向链表的中位数
- 在单向链表中添加双向链表节点