/*
連結リスト(一方向)の最後に要素を追加するプログラムを作成しなさい。
ただし、連結リストの最後の要素を指すポインタを保持している場合と保持し
ていない場合について、プログラムを作成すること。
最後の要素を指すポインタを保持している場合
*/
#include <stdio.h>
#include <stdlib.h>
#define SIZE_BUF (256) /* 一行入力バッファサイズ */
/* 座標リストノード構造体 */
typedef struct T_Node {
struct T_Node *pNext; /* Nextポインタ */
int value; /* 値 */
} T_Node;
/* リストダンプ */
void dumpList(T_Node *p)
{
printf("\n ======== dump List ========= \n");
for (;p != NULL; p = p->pNext) {
printf("%d\n", p->value);
}
}
/* リスト解放 */
void freeList(T_Node *p)
{
T_Node *pDel;
while (p != NULL) {
pDel = p;
p = p->pNext;
free(pDel);
}
}
int main(void)
{
T_Node* head = NULL;
T_Node *p;
char buf[SIZE_BUF];
for (;;) {
/* リストノードバッファ取得 */
p = malloc(sizeof(T_Node));
p->pNext = NULL;
if (p == NULL) {
/* メモリエラー */
fprintf(stderr, "memory err\n");
exit(-1);
}
/* 入力 */
printf("input numbar (END Ctrl-D)> ");
if (fgets(buf, SIZE_BUF, stdin) == NULL) {
break;
}
if (sscanf(buf, "%d ", &p->value) != 1) {
printf("format error!! \n");
continue;
}
if (head == NULL) {
/* リストが空 */
head = p;
} else {
T_Node* t = head;
while(t->pNext != NULL){
t = t->pNext;
}
t->pNext = p;
}
}
/* リストダンプ */
dumpList(head);
/* リスト解放 */
freeList(head);
return 0;
}