2016-09-28 23 views
0

Cでリンクリストを実装しようとしていました。リンクリストで要素をリストの先頭に挿入したいので、次のメソッド...リンクリストの最後の要素をC言語でnullにするにはどうすればいいですか?

void insertToStart(LinkedList* list, Student st) 
{ 
    LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode)); 
    newNode->data = st; 
    newNode->next = list->head; 
    list->head = newNode; 
} 

私のリストを印刷しようとすると私の問題が発生します...私は無限ループを取得します。これが最後の要素の私のリストの次はnullに指していないので、それはあるかもしれない考え出したが、私は最後の要素の次のポイントはnullに作る方法がわからない場合は、私がprintlist方法

void printList(LinkedList* list) 
{ 
    LinkedListNode* current; 
    current = list->head; 
    while(current != NULL) 
    { 
    printf("Name: %s ID: %d\n", current->data.name , current->data.ID); 
    current = current->next; 
    } 
} 

です。これどうやってするの? これは...

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 

typedef struct{ 
    char name[20]; 
    int ID; 
} Student; 

typedef struct LinkedListNode{ 
    Student data; 
    struct LinkedListNode* next; 
} LinkedListNode; 

typedef struct { 
    LinkedListNode* head; 
} LinkedList; 

void mallocList(LinkedList* list); 
void insertToStart(LinkedList* list, Student st); 
void printList(LinkedList* list); 

#endif 
+5

私のクリスタルボールは、最初の空のリストを作成したときに 'head'を' NULL'に設定するのを忘れたと考えています。 – molbdnilo

+1

'void mallocList(LinkedList * list)'を表示し、これを呼び出します。 – BLUEPIXY

+1

'mallocList'、' insertToStart'、 'printList'をどのように呼び出すかを示してください。これについても読んでください:[mcve] –

答えて

0

あなたはNULLlist->headを初期化する必要があります。 次に、リストの先頭に、insertToStartという要素を追加すると、リストの最後の要素はnextとなり、NULLとなり、リストに正しいテールが表示されます。 また、リストからノードの削除を実装する場合は注意が必要です。この場合、テールノードを削除するとき、以前のノードのnextポインタがNULLに設定されていることを確認してください。

+0

それが私の問題を解決しました。 –

0

NULLを== 0私のヘッダファイルですので、あなたのリンクリストの終了を表すために0にあなたのnext PTRを設定します。

すなわち

next = 0; 
+1

これは正しくありません。最初の行では、 'newNode-> next'は古いリストの先頭を指し、' list-> head'は新しいリストの先頭を指し示すように移動します。 newNode'。 – Cantfindname

+0

あなたが正しいとお詫び申し上げます。その声明を削除しました。 – lfgtm

関連する問題