【发布时间】:2016-08-26 18:30:51
【问题描述】:
这是一个相当简单的项目,我花了大约 20 个小时在它上面绕了一圈,一点进展都没有。一开始我似乎朝着正确的方向前进,但我有一个 TA 试图向我解释它,它扭曲了我的大脑,让我回到了原点。
我知道这很可能是一个简单的错误,所以我将发布代码以及我的解释。注意:断言函数不是问题
在 H 文件中
struct Node {
int num;
Node *next;
};
CPP 文件
void Intset::insert(int key)
{
Node * current;
current->num = key;
current->next = NULL;
assert (!find(key));
if(head == NULL)
{
head = current;
}
else if(head->num >= key)
{
head->next = head;
head = current;
}
else if(head->num < key)
{
head->next = current;
}
所以我在这个函数(将键插入排序链表)背后的想法是创建一个新节点 current 并用用户输入的键填充其 num 字段,并使其下一个字段等于 NULL。我的第一个检查是查看 head 是否为空,以及是否将 current 的内容复制到它。我的第二个检查是查看 head 的 num 字段是否包含大于或等于用户输入键的数字。
如果是这样,我将头节点移动到下一个节点并用当前节点替换它(前面的数字较小)。我的第三次检查查看 head 中的数字是否小于用户输入的密钥,如果是这样,它将用 current 填充 head 的下一个字段(较小的数字首先出现)。到目前为止,我遇到了段错误错误,我不确定我分配不正确。
【问题讨论】:
-
你需要为新节点声明内存。你不能就这样简单地插入它。
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
找出链表的最佳方法是使用铅笔和纸。画出列表中的节点。绘制节点之间的连接。然后在您对其进行操作、插入和删除等操作时重新绘制列表和任何其他涉及的节点...
标签: c++ insert linked-list