2016-12-03 6 views
1

Почему последний вызов добавления не работает? Мне нужно добавить мусор здесь, потому что он жалуется, что мой пост - это в основном код, я надеюсь, что на данный момент этого достаточно.Связанный список append не работает в последний раз

typedef struct node { 
    int val; 
    struct node * next; 
} node_t; 

void append_node(node_t * head, int val) { 
    node_t * current = head; 

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

    current->next = malloc(sizeof(node_t)); 
    if(current->next == NULL) 
    printf("err"); 

    current = current->next; 
    current->val = val; 
    current->next = NULL; //malloc(sizeof(node_t)); 
} 

void print_list(node_t * head) { 
    node_t * current = head; 
    while(current->next != NULL) { 
     printf("%d ", current->val); 
     current = current->next; 
    } 
    printf("\n"); 
} 

int main() { 
    node_t * list = malloc(sizeof(node_t)); 
    list->val = 1; 
    list->next = NULL; 
    append_node(list,12); 
    append_node(list,14); 
    append_node(list,17); 

    print_list(list); 
    return 0; 
} 

Выход:

1 12 14 
+3

Не против использования функции печати? –

+1

(потому что он как-то не распечатывает последний узел) –

+1

@PaulStelian Согласен ... логика в функции добавления выглядит правильно. –

ответ

1

Проблема заключается в функции печати. Вы не печатаете последний элемент.

#include <stdio.h> 
#include <stdlib.h> 
typedef struct node { 
    int val; 
    struct node * next; 
} node_t; 

void append_node(node_t * head, int val) { 
    node_t * current = head; 

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

    current->next = malloc(sizeof(node_t)); 
    if(current->next == NULL) 
    printf("err"); 

    current = current->next; 
    current->val = val; 
    current->next = NULL; //malloc(sizeof(node_t)); 
} 

void print_list(node_t * head) { 
    node_t * current = head; 
    while(current!= NULL) { 
     printf("%d ", current->val); 
     current = current->next; 
    } 
    printf("\n"); 
} 

int main() { 
    node_t * list = malloc(sizeof(node_t)); 
    list->val = 1; 
    list->next = NULL; 
    append_node(list,12); 
    append_node(list,14); 
    append_node(list,17); 

    print_list(list); 
    return 0; 
}