2016-04-27 2 views
-1

Я пытаюсь вставить узел в конец связанного списка, но по какой-то причине моя функция печати сообщает мне, что список пуст.Вставка связанного списка в конце

Struct:

struct node{ 
     int data; 
     struct nodeList *next; 
}; 

Вот моя AddNode функция

struct node* addNode(struct node* List, int n){ 

    struct node* newNode = (struct node*)malloc(sizeof(struct node)); 
    struct node* temp = (struct node*)malloc(sizeof(struct node)); 


    newNode->data = n; 
    newNode->next= NULL; 

    if(List == NULL){ 
     List = newNode; 
     return List; 
    } 

    temp = List; 

    while(temp->next != NULL){ 
     temp = temp->next; 
    } 

    temp->next = newNode; 
    return List; 

    } 

Я признателен за любую помощь!

+0

После определения структуры отсутствует точка с запятой. – wildplasser

+0

Я просто забыл ввести его, но он в коде. Спасибо за головы – Kris

+3

Почему вы выделяете память для 'temp'? Это утечка памяти. Вы никогда не используете выделенное вами хранилище. –

ответ

2

Возможно, вы неправильно вызываете свою функцию, как отмечали другие.

struct node *numbers = NULL; 
numbers = addNode(numbers, 5); 

В качестве альтернативы вы можете переписать свою функцию для использования двойных указателей. Это устранило бы необходимость повторного назначения указателя списка на результат вашей функции addNode() каждый раз. Это также сокращает реализацию функции.

void addNode(struct node **list, int n) { 

    struct node *newNode = malloc(sizeof(struct node)); 
    newNode->data = n; 
    newNode->next= NULL; 

    while (*list){ 
     list = &(*list)->next; 
    } 

    *list = newNode; 
} 

Это можно назвать так:

struct node *numbers = NULL; 
addNode(&numbers, 4); 

Ссылки:

+1

В этом нет ничего плохого. Возвращается новый список, и это важно. Правда, нет необходимости присваивать его «List», но это безвредно. –

+0

Итак, когда я возвращаю List, он не возвращает newNode, который я только что установил? – Kris

+0

Исправлено на основе комментариев. – kylemart

Смежные вопросы