双向链表的中位数
Median of a doubly linked list
给定一个排序的双向链表,你将如何找到中间元素?我能想到的一种方法是遍历一次列表,一旦一个值重复,我们就知道我们已经遍历了整个链表。在他看来,我们知道有多少个元素,所以我们可以取中位数,因为它已经排序了,这将是:
运行 时间:O(n)
space 复杂度也为 O(n)。
有没有更有效的方法?
- 1.Have 2 个指向 link 列表开头的指针 p1 和 p2
- 将起始节点的值存储在某个临时变量中
- p2每前进2个节点,p1应该前进1个节点。继续
直到 p2->next 是重复节点
- 这样循环结束时,p2在最后一个节点,p1在中间节点。
您可以使用 2 个指针 p1 和 p2 来实现。
最初这 2 个指针将指向列表的头部。
现在,遍历List,其中p1前进2次,p1前进1次,直到p2到达List的末尾。
当p1遍历完整的List时,p2就遍历了一半的List,从而指向List的"Mid"
给定一个排序的双向链表,你将如何找到中间元素?我能想到的一种方法是遍历一次列表,一旦一个值重复,我们就知道我们已经遍历了整个链表。在他看来,我们知道有多少个元素,所以我们可以取中位数,因为它已经排序了,这将是:
运行 时间:O(n) space 复杂度也为 O(n)。
有没有更有效的方法?
- 1.Have 2 个指向 link 列表开头的指针 p1 和 p2
- 将起始节点的值存储在某个临时变量中
- p2每前进2个节点,p1应该前进1个节点。继续 直到 p2->next 是重复节点
- 这样循环结束时,p2在最后一个节点,p1在中间节点。
您可以使用 2 个指针 p1 和 p2 来实现。
最初这 2 个指针将指向列表的头部。
现在,遍历List,其中p1前进2次,p1前进1次,直到p2到达List的末尾。
当p1遍历完整的List时,p2就遍历了一半的List,从而指向List的"Mid"