0

*head と *tail という 2 つの構造体があります。

リンクされたリストの開始には head を使用し、終了には tail を使用します。

任意の数の要素を持つリンクされたリストがあるとしましょう

typedef struct queue
{
    int stuff;
    struct queue *nextNode;
}q;

私のノードの 1 つで、stuff = 164 (これは仮説です)

リンクされたリストを検索して 164 を見つけるにはどうすればよいですか?

ありがとうございました!

4

4 に答える 4

4

リンクされたリストの先頭へのポインターを取得します。nextNodeリストの最後の項目が であるポインターでマークされていると仮定すると、NULLリストを 1 つずつ反復処理できます。

struct queue *tmp = head;
while (tmp != NULL) {
    if (tmp->stuff == 164) {
        // found it!
        break;
    }
    tmp = tmp->nextNode;
}
于 2013-02-27T22:33:17.290 に答える
0

頭から始めましょう。テールに到達しておらず、現在のアイテムの値は私たちが探しているものではありませんが、次のノードに移動します。アイテムが終了した場合、ループは私たちが探しているものではありません->そのようなアイテムはリストに存在しません。コードは、テールポインタがNULLではないことを前提に記述されています。

struct queue* item = head;
while (item != tail && item->stuff != 164) {
    item = item->nextNode;
}
if (164 == item->stuff) {
// do the found thing
} else {
// do the not found thing
}
于 2013-02-27T23:12:31.217 に答える
0

キュー全体を反復するだけです

struct queue *current = head;

while(current != NULL)
{
    if(current->stuff == numToSearch)
        // found it
    current = current->nextNode;

}

注: 些細な構文エラーはご容赦ください。c に触れてからしばらく経ちました

于 2013-02-27T22:32:48.760 に答える
0
struct queue *find(struct queue *ptr, int val) {
 for ( ; ptr; ptr = ptr->nextNode) {
     if (ptr->stuff == val) break;
     }
 return ptr;
}
于 2013-02-27T22:37:30.123 に答える