これは非常に単純だと思いますが、リンクされたリストは初めてで、ポインターには少し慣れていません。パラメータを簡単に渡すことができる C++ でのコーディングには慣れていますが、C ではそれほどではありません。だから物事が簡単にうまくいかないとき、私は混乱します。
私は基本的に、渡された変数を受け取り、リンクされたリストを検索するプログラム内の関数が必要です。私はそれをメインで動作させていますが、それを別の機能として持っていると頭が痛くなります。
#include <stdio.h>
#include <stdlib.h>
int globalNum = 1;
typedef char DATA;
struct node
{
DATA d;
int nodeNum;
struct node *next;
};
main()
{
struct node *head = NULL;
struct node *tail = NULL;
int nodeNum;
/*CREATE*/
while(globalNum <= 5)
{
struct node *new;
if((new = malloc(sizeof(struct node))) == NULL) abort();
new->next = NULL;
new->nodeNum = globalNum;
globalNum++;
if(!head) head = new;
else tail->next = new;
tail = new;
}
/*ACCESS*/
struct node *access;
access = head;
while(access)
{
if(access->nodeNum != 5)
{
printf("%d\n", access->nodeNum);
access = access->next;
printf("NEXT\n");
}
else
{
printf("FOUND\n");
return 0;
}
if(!access)
{
printf("CANNOT ACCESS\n");
return 0;
}
}
}
@ 555k ダブルポインターに関するアドバイスをありがとう!アクセス コードに同様の関数を作成しましたが、リンク リスト ノードとセグメンテーション フォールトを読み取れません。検索機能はどのようにしてaccess->next
場所を知ることができますか? を呼び出すときに何を渡す必要がありますsearch(&head);
か?
int access(struct node *head)
{
struct node *access;
access = head;
while(access)
{
if(access->nodeNum != 5)
{
printf("%d\n", access->nodeNum);
access = access->next;
printf("NEXT\n");
}
else
{
printf("FOUND\n");
}
if(!access)
{
printf("CANNOT ACCESS\n");
}
}
}