我试图将一个元素添加到由值和下一个组成的链表中,但是原始列表总是被返回,有什么想法吗?
注意:我无法更改签名。
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人被退回。
答案 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);