整数の単一リンクリストがあります。ノードは次のように定義されます。
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++ で作成されました。他の言語でも助けていただければ大丈夫です。