更改一个指针会影响其他指针
问题描述:
在while循环结束之前,如何在此代码上komv-> next变为NULL? 我注意到,在这个线路城镇 - > previous-> next = town-> next后变为NULL,但我不明白为什么发生这种情况。程序以分段故障结束。更改一个指针会影响其他指针
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)) {
有可能是一个更好的解决方案,也取决于你想要什么样的假设和行为。例如,如果是可以接受具有相同num
节点,而不是之前,那么你可以简单地使用该条件后,插入town
:
if (town->num > komv->next->num) {
答
我能想到的唯一的条件是,如果town
是列表中的最后一个节点,那么你得到的最后一次迭代)
if (town->num >= komv->next->num) // komv is the previous to last element, so komv->next is town.
{
town->previous->next = town->next; // here, komv->next is changed to NULL.
...
镇是已在列表 – seinta 2014-10-29 14:25:36
这条线的节点:当((komv->旁边)= NULL)应该是同时(komv! = NULL),然后修改循环的其余部分以基于当前链接列表节点。那么只进入下一个节点'komv = komv-> next;'在循环结束时 – user3629249 2014-10-30 00:30:14