链接列表作为函数

时间:2017-05-10 14:16:56

标签: c pointers linked-list

程序不会按预期打印列表的值。它打印的东西必须是一个内存地址imo。我一直试图找到独奏解决方案,但到目前为止无济于事。我将不胜感激。

#include <stdio.h>

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

void print_list(node_t * head);

void main()
{
    node_t * head = NULL;
    head = malloc(sizeof(node_t));
    if (head == NULL)
        return 1;
    head->val = 1;
    head->next = malloc(sizeof(node_t));
    head->next->val = 2;
    head->next->next = malloc(sizeof(node_t));
    head->next->next->val = 3;
    head->next->next->next = malloc(sizeof(node_t));
    head->next->next->next->val = 18;
    head->next->next->next->next = NULL;

    print_list(&head);
    system("pause");
}

void print_list(node_t * head) {
    node_t * current = head;

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

由于您的输入,上述问题已得到解决。非常感谢你!但是,出现了一个新问题。想要在列表中添加新元素,我添加了几行代码。不幸的是,没有打印想要的结果,程序突然终止。这是新代码:

    head->next->next->next->next = malloc(sizeof(node_t));
    head->next->next->next->next->val = 5556;
    head->next->next->next->next->next = NULL;
    node_t * current = head;
    while (current->next != NULL) 
    {
        current = current->next;
    }
    current->next = malloc(sizeof(node_t));
    current->next->val = 32;
    current->next->next = NULL;
    printf("%d\n", current->next->val);
    system("pause");
}

3 个答案:

答案 0 :(得分:5)

请注意,您的函数void print_list(node_t * head);需要node_t *类型的参数,但您传递的类型node_t **参数。

print_list(&head);更改为print_list(head);

head的类型为node_t *,而&head的类型为node_t **

答案 1 :(得分:0)

print_list(&head)功能更改为print_list(head)

print_list(&head);

print_list(head);

function void print_list(node_t * head)接受单个引用指针。但是您将**head传递给print_list函数。

答案 2 :(得分:0)

使用print_list调用print_list(&head);函数,但head已经是指向节点的指针。

这意味着print_list函数实际上正在接收指向节点指针的指针,或node_t **。因此,当您尝试打印指针的值时,您将看到一些看似是内存地址的内容。要解决此问题,只需使用print_list(head);

传入列表的头部即可