C将节点添加到链接列表

时间:2017-05-03 23:33:23

标签: c linked-list

我试图将一个元素添加到由值和下一个组成的链表中,但是原始列表总是被返回,有什么想法吗?

注意:我无法更改签名。

intlist* intlist_prepend(intlist* xs, int val) 
{
    intlist* ys = (intlist*)malloc(sizeof(intlist));
    ys->val = val;
    ys->next = xs;
    return ys;
}

这是我的测试用例:

intlist* prepend = malloc(sizeof(intlist*));
    prepend->val = 5;
    prepend->next = NULL;

    printf("\n*** testing intlist_prepend\n\n");
    printf("expecting 6 5: ");
    intlist_prepend(prepend, 6);
    intlist_show(prepend);
    printf("\nexpecting 7 6 5: ");
    intlist_prepend(prepend, 7);
    intlist_show(prepend);

但只有5人被退回。

1 个答案:

答案 0 :(得分:3)

当您预先添加时,您需要更新列表的头部。因此intlist_prepend()的返回值成为新的头。

intlist* prepend = malloc(sizeof(intlist*));
prepend->val = 5;
prepend->next = NULL;

printf("\n*** testing intlist_prepend\n\n");
printf("expecting 6 5: ");
prepend = intlist_prepend(prepend, 6);
intlist_show(prepend);
printf("\nexpecting 7 6 5: ");
prepend = intlist_prepend(prepend, 7);
intlist_show(prepend);