提问人:Alex 提问时间:10/13/2023 最后编辑:Alex 更新时间:10/13/2023 访问量:65
尾部递归函数,以便在元素前插入 x
Tail recursive function in order to insert x before an element
问:
我有一个赋值,要求我在 C 中创建一个函数,以便在链接列表的最后 0 之前插入一个参数 x。我已经尝试了所有方法,我的最后一次尝试感觉它应该有效。但要么我的逻辑被打破了,要么我对指针的了解很糟糕。
让我试着解释一下,我的赋值需要创建一个函数,该函数将接受 2 个参数、一个自定义列表和 x 一个 int。它将使用带有“out”参数的子函数。
所以我做了什么,我走到这个列表的末尾,如果我遇到一个 0,我会将其地址存储在我的 out 参数中(类型:List)。 当我的列表为空时,如果没有找到零,我会在末尾堆叠 x,或者我会将其插入到 out 参数的地址。
当我调试时,我可以看到地址已正确分配,我的“插入”已正确完成(至少在“out”参数中),但是当我在调用后检查时,它不会更改“l”的值。它在最后插入时有效,但仅此而已。
代码
if (value(*l) == 0) {
*lastOcc = *l; // Assign address of zéro
// i'll add back the question after the deadline to avoid trouble, but the answer was here
main 很简单,我用 (&l, 5) 调用函数。
我希望我已经说得足够清楚了。你能指出我错过了什么吗,我真的很想理解为什么我的逻辑现在是失败的。
感谢您的帮助
答:
2赞
Emilio Silva
10/13/2023
#1
这是你的问题:
*lastOcc = *l
您正在使用的始终是您在 :lastOcc
AddBeforeLastZero
List lastOcc = NULL;
您正在使用间接来就地覆盖指针,但从来都不是链表的一部分,因此覆盖其值不起作用。*Liste
lastOcc
你想要的是这个:
lastOcc = l
现在,您将能够覆盖头部或一些.l
l->next
请参见 https://ideone.com/Zo3f7e 。
评论
0赞
Alex
10/13/2023
非常感谢你,很明显我做错了什么......我会在考试中避免这个错误。无论如何,谢谢,我将隐藏线程以避免暂时复制 xode,但我会在截止日期后将其展示回来
评论