2016-12-03 13 views
1

最後の追加呼び出しが機能しないのはなぜですか?私はポストが主にコードであると不平を言っているので、ここでいくつかのゴミを追加しなければならない。リンクされたリストの追加が最後に実行されない

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合意... add関数のロジックが正しいように見えます。 –

答えて

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; 
} 
関連する問題