在while循环结束之前,komv->next在这段代码中怎么可能变成空的呢?
我注意到在这行town->previous->next=town->next之后,这个值变为空,但我不明白为什么会发生这种情况。程序因分段错误而终止。
komv=list->First;
while ((komv->next)!=NULL)
{
if(town->num>=komv->next->num)
{
town->previous->next=town->next;
if(town->next!=NULL)
town->next->previous=town->previous;
town->next=komv->next;
town->previous=komv;
komv->next->previous=town; // gdb say komv->next=NULL
komv->next=town;
break;
}
komv=komv->next;
}
最佳答案
如果komv
是列表中town
之前的节点,则town->previous == komv
。如果town
是最后一个节点,则town->next == NULL
。当这些同时成立时,这:
town->previous->next=town->next;
减少到:
komv->next = NULL;
在这种情况下,似乎不需要修改列表,因此可以通过将条件修改为
if ((town != komv->next) && (town->num >= komv->next->num)) {
也许还有更好的解决方案,这取决于你想要什么样的假设和行为。例如,如果可以在具有相同
town
的节点之后而不是之前插入num
,则可以简单地使用以下条件: if (town->num > komv->next->num) {
关于c - 一个指针的变化会影响其他指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26632667/