11

私は周りを見回しましたが、理解できる答えが本当に見つからないか、それが私には当てはまりません。私はこのクラスを持っています:

class Node
{
    public int value;
    public Node next;
}

headそして、単一のリンクリストの先頭であるというメンバー変数があります。現在、リンクされたリストのさまざまなノードを反復処理して、特定の を検索しようとしていますvalue。手動で行う場合は、5番目のノードが必要なhead.next.next.next.next.value場合に行います。valueこれは、非常に大きなサイズのリンク リストではすぐに面倒になるので、私の質問は、リンク リストの各ノードの変数をチェックできるように、ループを作成してこれを繰り返すにはどうすればよいかということです。value

4

4 に答える 4

11

次のようにクラスを反復処理します。

var currentNode = head;
while ((currentNode != null) && (currentNode.Value != desiredValue))
   currentNode = currentNode.next;

ループが完了するwhileと、 currentNode は目的の値を持つノードになるnullか、ノードを含みます。

于 2013-10-16T06:12:55.983 に答える
4

この種のリストでは、通常、現在のノード (先頭から始まる) への参照を保持し、各反復の後、そのnextノードへの参照の値を変更します。が にcurrentNodeなるとnull、最後の要素に次の要素がないため、リストの最後に到達しています。

このようなもの:

Node currentNode = head;
while (currentNode != null) {
    // do stuff with currentNode.value
    currentNode = currentNode.Next;
}

ところで、BCL には、この種のタスクに役立ついくつかのクラスが既に含まれています。

  • List<T>、内部的に配列を使用して要素を格納し、それらへのランダムアクセスを提供します
  • LinkedList<T>、カスタム クラスと同じ原則を使用します。

しかし、何らかの理由であなたのやり方でそれを行う必要があるかもしれません:)

于 2013-10-16T06:12:35.877 に答える