【发布时间】:2018-03-10 19:48:36
【问题描述】:
我试图传入一个链表,然后删除不是数字的节点。我不断收到分段错误,我不确定我在哪里找到一个不存在的指针。
void clean(node*& start)
while(start)
if(*is a number*){
node* tail = start;
while (tail->next){
node* temp = tail->next;
tail->data = temp->data;
tail = tail->next;
}
if (!tail->next)
delete tail;
}
start= start->next;
}
}
->next 将节点链接到其余节点。
【问题讨论】:
-
如果你的意思是你所说的“我试图传入一个链表,然后删除不是数字的节点” - 我看不出你的代码中应该有
new的任何理由;您的代码对于您的意图来说过于复杂 -
如果
tail->next为NULL,则下一行将取消引用null,就好像它是一个节点并分配给那里的成员 -
在一张纸上画出节点列表。让一些节点编号和一些不编号,然后按照您的指示通过列表并观察会发生什么。当发现自己被指示做一些愚蠢的事情时,请更改代码以使其不愚蠢。提示:这个
while (tail->next)看起来很傻。 -
所示逻辑似乎存在严重的、根本性的缺陷。既定目标是“删除不是数字的节点”。逻辑上遵循“如果(是一个数字)”,那么这个节点属于列表,并且该过程应该简单地前进到列表中的下一个节点,就是这样。代码没有这样做,而是继续执行一些我无法破译其目的的令人困惑的循环。这种简单、直接的任务应该只包括对整个列表的一次遍历,跳过不属于的节点。而已。不需要任何嵌套循环。
-
使用调试器并逐行跟踪您的代码...或使用纸和铅笔。这里有明显的错误,比如当
tail为空时访问tail->next。node* temp = new node;行也没有意义。还有更多问题!
标签: c++ linked-list segmentation-fault doubly-linked-list