0

整数の単一リンクリストがあります。ノードは次のように定義されます。

    class Node {
        public:
            int value;
            Node *next = NULL;

    };

q1、q2、および q3 (1 番目、2 番目、3 番目の四分位数) をそれぞれ見つける必要があります。最初のパスでリンクされたリストの長さを見つけ、2番目のパスで正確な要素を見つけるため、2パスを使用すると簡単に見つけることができます。しかし、リンクされたリストを 1 回だけトラバーサルしてそれを見つけるにはどうすればよいでしょうか。q2(中央値) を見つけるには、低速および高速のポインター アプローチを使用できます。つまり、各反復で、1 つのポインターを 1 ステップにインクリメントし、2 番目のポインターを 2 ステップにインクリメントします。その場合、リンクされたリストの半分のサイズの位置を取得します。

しかし、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