将节点附加到C中的链接列表(我几乎就在那里)

时间:2015-07-17 09:03:36

标签: c linked-list append

我试图弄清楚如何将节点附加到链接列表。 我觉得自己几乎就在那里但是在盯着代码一段时间之后我现在无法想到它的错误。

我必须提一下,在将第一个int添加到列表后,我得到了分段错误...

RewriteCond

我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

即使current为NULL,也会result

您必须在current->next = newNode;

时从函数返回
(current == NULL)

或将if (current == NULL) { pHead = newNode; return; } else { while (current->next != NULL) current = current->next; } current->next = newNode; 放入else语句中:

current->next = newNode;

完整示例:

if (current == NULL) {
    pHead = newNode;
}

else
{
    while (current->next != NULL)
        current = current->next;
    current->next = newNode;
}

答案 1 :(得分:1)

我认为问题在于:

@runtime/debug

最后一行if (current == NULL) pHead = newNode; else { while (current->next != NULL) current = current->next; } current->next = newNode; 应位于current->next = newNode正文中,否则当else为NULL时,您将尝试取消引用NULL指针。

所以,它应该是:

current

另一个问题是你永远不会修改if (current == NULL) pHead = newNode; else { while (current->next != NULL) current = current->next; current->next = newNode; } 。您只能修改head内的头指针的私有本地副本。此修改在append()之外不可见,因此程序最终会泄漏内存而您永远无法访问该列表(因为append()始终为NULL)。您可以将head设为pHead(以便对node **进行修改),或者您可以修改*pHead内的head,而不是传递它作为一个论点。这将起作用,因为您不会修改私有本地副本。以下是append()的样子:

append()