2016-12-03 40 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; 
}