为什么这个打印链表功能不起作用?

时间:2013-02-19 04:09:17

标签: c linked-list

我有以下功能

void printLinkedList(struct node *head) {

    printf("%d-->", head->data);

    while(head->ptr != NULL) {
        head = head->ptr;
        printf("%d-->", head->data);
    }
    printf("NULL\n");
}

我想打印以下列方式构建的链表的内容:

for (int i = 0; i < 10; i++) {
    head->data = i+1;
    head->ptr = malloc(sizeof(struct node));
    head = head->ptr;
}

理想情况下,这应该给我一些:

1-->2-->3-->4-->...-->10-->NULL

如果一切都正确,那么valgrind会给我记忆错误。请告诉我我做错了什么。

4 个答案:

答案 0 :(得分:1)

检查一下。

struct node *temp, *head= NULL, *last = NULL;
    for (int i = 0; i < 10; i++) {
        temp = malloc(sizeof(struct node));
        temp->data = i+1;
        temp->ptr = NULL;
        if (head == NULL)
          head = temp;
        if (last != NULL)
          last->ptr = temp;
        last = temp;
    }
printLinkedList(head);

答案 1 :(得分:1)

我稍微修改了汤姆斯的回答:

struct node *head = NULL, **temp = &head;
for (int i = 0; i < 10; i++) {
    *temp = malloc(sizeof(struct node));
    (*temp)->data = i+1;
    (*temp)->ptr = NULL;
    temp = &(*temp)->ptr;
}
printLinkedList(head);

原始代码产生seg错误,因为temp没有正确地进行malloced。

答案 2 :(得分:0)

如果在不构建链接列表的情况下调用print函数,则会显示错误,因此请按以下步骤更改打印功能:

void printLinkedList(struct node *head) 
{
    while(head != NULL) 
    {
        printf("%d-->", head->data);
        head = head->ptr;
    }
    printf("NULL\n");
 }

答案 3 :(得分:0)

这是修改后的代码 - 你的构造有问题。

typedef struct _node {
    int data;
    struct _node *ptr;
} NODE, *PNODE;

PNODE head;

int main (int argc, char * argv[])
{

    head = (PNODE) malloc(sizeof(NODE));
    PNODE node = head;

    int i = 0;
    node->data = ++i;
    node->ptr = NULL;

    for ( ;i < 10; ) {
        PNODE tmp = (PNODE) malloc(sizeof(NODE));
        tmp->data = ++i;
        tmp->ptr = NULL;

        node->ptr = tmp;
        node =tmp;
    }

    printLinkedList(head);

    freeLinkedList(head);

    return 0;

}