今日はちょっとした疑問を持ってきました。
#include <stdio.h>
#include <stdlib.h>
typedef struct node_tag{
int value;
struct node_tag *next;
}node_t;
void check(node_t *);
node_t * insert_node(node_t *, int );
int main (void){
node_t node1, node2, node3;
node_t fake;
node_t *head = &node1;
fake.value = -1;
fake.next = &node1;
node1.value = 1; node1.next = &node2;
node2.value = 2; node2.next = &node3;
node3.value = 3; node3.next = NULL;
insert_node(&fake, 5);
check(fake.next);
return 0;
}
void check(node_t * com){
node_t * fake;
fake = com;
do{
printf("test: %d\n", fake->value);
fake = fake->next;
}while(fake != NULL);
}
node_t * insert_node(node_t *n, int val){
node_t *new_node;
new_node = (node_t *)malloc(sizeof(node_t));
if(new_node == NULL){
fprintf(stderr, "メモリ確保失敗.");
return NULL;
}
new_node->value = val;
new_node->next = n->next;
n->next = new_node;
return new_node;
}
リストについてなんですが・・・自分で作ってみてダミーノードをfakeとして挿入してみました。このダミーノードの実装は正解なんでしょうか??意味的に間違っていたらご指摘お願いします。
あと、insert_node関数なんですが、return new_nodeとしてもmain関数内で戻り値を受け取ってません。
でも実行可能なのはなぜなんでしょうか??もしかしたら、プログラム上で必要なければ受け取らなくてもいいんでしょうか??(または、returnを書かなくても ← void関数で使わないのは分かります)
ご協力お願いします。