2016-08-03 16 views
0

循環リンクリストについて読んでいました。ここで私はそれがどのように動作するのか分からないコードです。循環リンクリストのインデックスの要素

public int elementAt(int index){ 
     if(index>size){ 
      return -1; 
     } 
     Node n = head; 
     while(index-1!=0){ // this line is unclear for me 
      n=n.next; 
      index--; 
     } 
     return n.data; 
    } 

私は同じコードを書いたが、このようになります。ここ

public int elementAt(int index){ 
     if(index>size){ 
      return -1; 
     } 
     Node n = head; 
     while(n.size != index){ // here is my change in the code 
      n=n.next; 
     } 
     return n.data; 
    } 

は、全体のコードです:http://algorithms.tutorialhorizon.com/circular-linked-list-complete-implementation/

私は2番目のコードでは、右やっていますか?

ありがとうございました

+1

自分でチェックしたりデバッガを使用してみませんか? – Idos

+0

'' n.size'は何ですか? – Thomas

+0

ここに全体のコードhttp://algorithms.tutorialhorizo​​n.com/circular-linked-list-complete-implementation/ありがとう – Joe

答えて

0

これは単なるカウントです。あなたは様々な方法でそれを行うことができます。私はサイズがあなたのLinkedListのサイズであると仮定します。その場合、あなたのコードは間違っています。 1、2、3、:あなたは

public int elementAt(int index){ 
     if(index>size){ 
      return -1; 
     } 
     Node n = head; 
     int i = 0; // zero-indexing 
     while(i++ != index){ // you can increment i at the end too 
      n=n.next; 
     } 
     return n.data; 
    } 

最初のコードはまた、代わりにそれは既存のもの

+0

ありがとう、私は理解しています、神はあなたを祝福します:) – Joe

1

のコード例は、1ベースのインデックスを使用して使用し、別の変数を使用してのカウントされ、次のように行うことができます。サイズは、これは、コンピュータ科学において、0、..、size-1のいずれかが期待される、奇妙なものです。

残念ながら、sizeはリスト全体のプロパティであり、リスト内の1つのノードではありません。だから彼らの解決策はいいです。

インデックスが< = 0のときはすばらしいことが起こります。ノードはpreviousフィールドを持っている本当の円形リストについて


。最後のノードは、両方の方法で最初のノードにリンクされます。

この場合、nextまたはpreviousに従って両方向に歩くことができます。 次に、インデックス<のサイズ/ 2の場合は、インデックスへの転送先はnext、それ以外の場合は約previousに戻ります。最小のステップ数を取るために。

+0

本当に素敵なもの;) – Thomas

0

あなたが理解していない行は、単に「インデックス」の位置を控えているだけで、先頭から始まっています。この方法では、ヘッド要素から要素 "インデックス-1"の位置を戻します。 他の仮定は、ヘッド要素が1であることです。

関連する問題