2012-11-15 3 views
6

[EDIT]自分のコードが修正されました。 while(temp - > next!= NULL)while(temp!= NULL)ではありません。間違ったコードを挿入して申し訳ありません。インタビューのテストでLinkedListを使用しました

今日、私はオンラインプログラミングテストに参加しました。インタビュアーはコードと他の面接者を評価するためにCodilityを使用しました。 しばらくして、リンクリストに関する質問がありました。リンクされたリストのアイテム数を数えようとしています。

私はこの質問に対する答えとして、このコードを送信するとき、私は覚えて
//This is struct declaration 
struct SomeStruct 
{ 
    int value; 
    SomeStruct* next; 
} 

int elementCount(SomeStruct* list) 
{ 
    int count = 0; 
    if(list != NULL) 
    { 
     SomeStruct* temp = list; 
     while(temp != NULL) 
     { 
      count++; 
      temp = temp->next; 
     } 
    } 
    return count; 
} 

、Codilityは、その実行にあまりにも多くの時間を消費するので、この解決策が間違っていることを私に指摘: は、私は私の知る限り、これを行うためにのみ可能なアプローチをしましたタスク。 私の頭の中で、this threadには、リンクされたリストのサイズを単純な方法ではなく通過させる他の方法はありません。

この解決策が間違っていると言われると、Codilityに問題はありますか?または別のアプローチがありますか?

PS:テストは十分にあなたが二回反復ごとに間接temp->nextを評価する必要はありませんSTL

+5

あなたは答えが時間のために間違っているわけではありません。その間違っているからです。 while(temp)は必要な式です。大文字小文字の区別:リスト内の1つの要素で(0)を返します。 – WhozCraig

答えて

3

の使用許可しました。

あなたは、単に

int count(SomeStruct const* pNode) 
{ 
    int result = 0; 
    while(pNode != 0) 
    { 
     ++result; 
     pNode = pNode->next; 
    } 
    return result; 
} 

を行うことができます。また、WhozCraig notesとして、あなたのコードは、単に潜在的に非効率的な(1つの結果によってオフをもたらす)、論理的に間違っていませんでした。

+0

私は2つの 'pNode-> nex'tを持っていると問題を引き起こしていることは知っていましたが、私はそれに私の指を置くことができませんでした... – PearsonArtPhoto

+0

@Cheersとhth。 - アルフ正解。私は自分の投稿に間違ったコードを書いた。私は注意を払わなかった。一定。 – learner

2

コーディネーションでは、循環リンクリストを使用してチェックすることができます。この場合、コードは決して終了しません。

しかし、これは、リスト<>とサイズメソッドを持つため、STL trivilailzesを使用しています。

+0

円順にリンクされたリストは非常に難しく、誰かが被験者にそれを跳ね返すことは考えにくいようです。 –

+0

@ Jeff Okですが、このコーディネートのために解決策が間違っているとみなします。私にとってはあまりにも多くです。 – learner

+0

@Mooing Duck私は同意します。 – learner

6

解決策は正しくありません。実際の数より1少ない数を返します。それを1要素のリストに適用してみてください。

ifと、temp->nextをチェックするこの奇妙な2層構造を考え出したのはなぜですか?なぜだけではなく、

unsigned elementCount(const SomeStruct *list) 
{ 
    unsigned count = 0; 
    for (const SomeStruct *temp = list; temp != NULL; temp = temp->next) 
    ++count; 
    return count; 
} 

私はあなたが使用されていないと予約「ヘッダ」要素としてlistが指す要素を処理することを決定したと思われます。実際、そうした方法でリストを実装するのが理にかなっていることがあります。しかし、私はあなたのポストに述べられているようなものは何も見ません。彼らはあなたにそれを具体的に扱うよう伝えましたか?

+0

一時的なポイントは何ですか? –

+0

@AndreyT No.私はこのアプローチを選択しました。私にとっては最もストレートな形です。 – learner

+0

@Cheersとhth。 - Alf:一時的な点は、元のパラメータ値を変更しない(すなわち、「通常のローカル変数としてパラメータを使用しない」)ことです。一部の人々は、この条約に従うことを好む。私は個人的に常にそれに従うとは限りません。しかし、私はその中に特定の論理を見ています。それは私が通常SOに固執しようとする理由です。 – AnT

関連する問題