我有一个整数的单链表。节点定义为
class Node {
public:
int value;
Node *next = NULL;
};
我需要分别找到 q1、q2 和 q3(第一、第二和第三四分位数)。使用两遍很容易找到,因为第一遍查找链表的长度,第二遍查找确切的元素。但是如何只使用一次遍历链表来找到它呢?要找到 q2(中位数),我们可以使用慢速和快速指针方法。即在每次迭代中,我们将增加一个指向一步的指针和指向两步的第二个指针。在这种情况下,我们将获得链表的一半大小的位置。
但是如何找到 q1 和 q3 呢?我已经完成了找到中位数(q2)的代码
void findQuartiles(Node *head)
{
Node *q2 = head;
Node *temp = head;
int q2_data;
while(temp)
{
q2_data = q2->value;
q2 = q2->next;
temp = temp->next->next;
}
cout<<"\nq2 = "<<q2_data;
}
这段代码是用 c++ 完成的。如果您也可以用其他语言帮助我,那也没关系。