リストについて質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いさご

リストについて質問です

#1

投稿記事 by いさご » 18年前

お久しぶりです。いさごです。
学校からリスト構造のプログラムを渡され、挿入を末尾に加えていく形式に変えろと言われました。
ループでリンクがNULLの所を探せばいいのかと思いましたが、繋ぎ方がよくわかりません。
どなたか教えてください・・・。お願いします。

以下は渡されてそのままのプログラムです。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef struct NodeT {
int data;
struct NodeT * next;
} Node;

typedef struct ListT {
Node * head;
Node * foot;
} List;

List * makeNewList ();

void insertAtHead (List *list, int newItem);

int main (int argc, char ** argv) {
List *list = makeNewList();

insertAtHead (list, 5);
insertAtHead (list, 4);
insertAtHead (list, 3);
insertAtHead (list, 2);
insertAtHead (list, 1);
return (0);
}

List * makeNewList () {
List * l = (List*) malloc (sizeof(List));
assert (l);
l->head = NULL;
l->foot = NULL;
return (l);
}

void insertAtHead (List *list, int newItem) {
Node * node = (Node *) malloc (sizeof(Node));
assert (node);
node->data = newItem;
assert (list);
node->next = list->head;
list->head = node;

if (list->foot == NULL) {
list->foot = node;
}
}

組木紙織

Re:リストについて質問です

#2

投稿記事 by 組木紙織 » 18年前

これ純粋な?リンクリストでは無いと思います。
List構造体で先頭と、最後ののーどを管理しているからです。
なのでリンクがNULLのノードを探さなくても、最後のノードの場所が分かります。

そのことに気づけば簡単に、繋げます。
以下のソースはリストの中身を表示する部分です。
つないだ後の確認にどうぞ。
void showListData(List * list)
{
	Node * now;
	now = list->head;
	
	while(now){
		printf("%d\n",now->data);
		now = now->next;
	}
}

いさご

Re:リストについて質問です

#3

投稿記事 by いさご » 18年前

回答ありがとうございます。
言われてみて初めてわかりました。(苦笑)
やっと何とかなりました。お世話かけました!

閉鎖

“C言語何でも質問掲示板” へ戻る