私は、単独でリンクされたリストについて本当に簡単な質問があります。これは他の質問で答えが見つかりませんでした。単独リンクされたリスト - C
これは私のコードです:今
#include <stdio.h>
#include <stdlib.h>
void add(int data);
void printList();
struct node
{
int data;
struct node * link;
};
struct node * head = NULL;
main()
{
char c;
while ((c = getchar()) != 'q')
{
if (c == 'a')
{
int temp;
printf("data: ");
scanf("%d", &temp);
add(temp);
}
if (c == 'p')
printList();
}
}
void add(int data)
{
struct node * temp = (struct node *) malloc(sizeof(struct node));
if (temp == NULL)
fprintf(stderr, "error");
temp->link = head;
temp->data = data;
head = temp;
}
void printList()
{
struct node * temp = (struct node *) malloc(sizeof(struct node));
if (temp == NULL)
fprintf(stderr, "error");
temp = head;
while (temp != NULL)
{
printf("%d", temp->data);
temp = temp->link;
}
}
、私は、新しいリストが作成されている場合は異なる何かをする私のadd関数の内部機能やシナリオを作成する必要があると言われています。言い換えれば、リストが空で、最初の要素が追加されているときは、入力されたリストが正面の別のノードを受け取っているときとは異なる処理が必要です。
# // Adding a Node at the Beginning of the List
#
# void addBeg(int num)
# {
# struct Node *temp;
#
# temp=(struct Node *)malloc(sizeof(struct Node));
# temp->Data = num;
#
# if (Head == NULL)
# {
# //List is Empty
# Head=temp;
# Head->Next=NULL;
# }
# else
# {
# temp->Next=Head;
# Head=temp;
# }
# }
あなたが気づかれるように、リストが空の場合は、ヘッドノードが移入さ:私はそのようなコードのオンラインの例を発見しました。
私のコードは正常に動作しますが、nullヘッドの状況を処理することに関して何かを見落としているかどうかは疑問です。
多くの感謝!
add()関数は機能しますが、mallocが失敗した場合はsegフォールトが発生します。 'temp == NULL'なら' return'する必要があります。 printで新しいノードをmallocする必要はありません。頭にポインタを使うだけで十分です。メモリがリークしています –
printList関数にはバグがあります:新しい一時ノードをmallocし、すぐにmallocのポインタをヘッドポインタで上書きして、割り当てられたノードをリークします。この場合、割り当ては不要です。 –
ああ!あなたが正しいです!ありがとう! – seyelent