gpt4 book ai didi

c - 将项目插入链表 - 是否需要迭代(C)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:02 24 4
gpt4 key购买 nike

我目前正在研究用于面试准备的链表,如果有人能对此有所说明,我将不胜感激。 C 中的以下函数假定在某个 Element 元素(作为参数传递给函数)之后将新元素插入到列表中:

bool insertAfter(Element * elem, int data){

Element * newElem, * curPos = head;
newElem->data = data;

while(curPos){
if(curPos == elem){
newElem->next = curPos->next;
curPos->next = newElem;
return true;
}
curPos = curPos->Next;
}
return false;
}

虽然我正在学习的教科书中指定了上述内容,但我尝试提出一个不使用任何迭代的解决方案:

bool insertAfter(Element * elem, int data){
Element * newElem;
newElem->next = elem->next
newElem->data = data
elem->next = newElem;
return true;
}

但是,由于它看起来过于简单,我感觉它可能行不通,但我不确定为什么。我需要一些关于为什么这可能有效或可能无效的技术细节的见解,谢谢。

最佳答案

两个版本都存在使用 newElem 的错误,就好像它是一个有效的指针一样。它不是。它未初始化为指向有效对象。

您可以通过在使用之前为对象分配内存来更正此问题:

Element * newElem = malloc(sizeof(*newElem));

两个版本的区别在于,如果 elem 由于某种原因不能从 head 访问或者它是 NULL,第一个版本不会对现有列表做任何事情。第二个版本不处理这两种情况。它假定 elem 在列表中并且它不是 NULL。

关于c - 将项目插入链表 - 是否需要迭代(C)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504921/

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