gpt4 book ai didi

C,列表的最后一个元素指向空

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:31 24 4
gpt4 key购买 nike

我有一个问题:如果指针链表相等,下面的函数会在第二个指针链表中复制它们。外汇列表 1 = 1 2 3 3 5 6 7 7 7

调用后的结果为:

列表 2 = 3 7

node *seqdup(node *lis)
{
if(lis == NULL)
return NULL;
else if (lis->next != NULL)
{
if(lis->data == lis->next->data)
{
node *p;
p = newnode();
p->data = lis->next->data;
p->next = seqdup(lis->next);
return p;
}
else
return seqdup(lis->next);
}
}

我知道这是一个无用的功能,它是为了学校考试。

问题是:我完成了一项学校作业,由于不包括诸如“if (lis->next == NULL) return NULL;”之类的条件,我在练习中得到了 10 分中的 2 分。由于在读取列表的最后一个节点时,该函数什么都不做:fx if the lis is 1 1 3 4

对于第一个节点,lis->next != NULL 他发现 1 == 1` 所以复制到 lis 2对于第二个,lis->next != NULL,和 1 != 3,所以 rec 调用,但没有复制然而第三个,因为 3 != 4,它什么都不做

问题是,只要我在递归调用后分配 lis->next,第二个列表的最后一个复制节点基本上会指向一个什么都不做的函数。

显然,我的老师对这个问题的严厉态度是正确的,因为有很多简单的方法可以解决这个问题。然而,我的问题是:为什么它仍然有效?

试着把它写下来并编译它并且像一个魅力一样工作:/

最佳答案

如果它对你有用,那只是意味着你很幸运,当条件失败时 eax 寄存器恰好为零。所以就好像您在函数末尾有一个return NULL

当我在我的编译器中对此进行测试时,情况并非如此,代码无法运行。对我来说,eax 寄存器保存着 lis 的值,所以就好像你在函数末尾有 return lis 一样。这只会产生一个永远循环的列表。

关于C,列表的最后一个元素指向空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17735865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com