我正试图将一个元素前置到一个由value和next组成的链表中,但是总是返回原始列表,有什么想法吗?
注意:我不能更改签名。

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只会被退回。

最佳答案

准备时,需要更新列表的标题。因此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);

关于c - C到链表的前置节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43771618/

10-08 22:42