0

我有一个整数的单链表。节点定义为

    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++ 完成的。如果您也可以用其他语言帮助我,那也没关系。

4

0 回答 0