2016-09-28 3 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이라는 요소를 추가하면 목록의 마지막 요소는 nextNULL과 동일하게 유지하므로 목록에 올바른 꼬리가 생깁니다. 또한 목록에서 노드 제거를 구현하려면주의해야합니다. 이 경우 꼬리 노드를 제거 할 때 이전 노드의 next 포인터가 NULL으로 설정되어 있는지 확인하십시오.

+0

그게 내 문제를 해결 .. 많이 감사 –

0

NULL의 == 0 그래서 당신의 연결리스트의 종료를 표현하기 위해 0으로 next PTR을 설정 ... 내 헤더 파일입니다.

next = 0; 
+1

이것은 올바르지 않습니다. 첫번째 줄에서'newNode-> next'는 이전 목록 머리글을 가리키고 두번째 줄은'list-> head'가 새 목록 머리글을 가리 키도록 이동합니다. newNode'. – Cantfindname

+0

당신이 옳다는 사과. 그 진술을 삭제했습니다. – lfgtm

관련 문제