所以我在玩弄链表,试图让我的大脑围绕在他们身上,并且我决定为列表中的每个节点添加“序数”值。这样,我可以通过序号而不是价值来删除,并且稍后再做一些其他很酷的事情。重置链接列表序号
只有当我从列表中删除一个元素时,所有的序号才会被击晕(相当明显),所以我认为“好吧,我只是在不同的函数中运行列表,重新设置所有的序号的序号“。从技术上讲,我可以在被删除的元素上启动这个函数,并将其从该节点的序号中传递出来以节省时间,因为之前的节点应该是未触及的,但现在我以不那么优雅的方式来做,因为我这样说。
“你的问题是什么?”。我知道你会问这个! “继续吧!”我知道你会这么说!
测试程序,我可以链接到或包含在这里,只是创建一个5个节点的列表,删除第三个节点,然后添加一个节点到最后。
预期输出是:DEBUG: resetting ordinals: 0 1 2 3 4
实际的输出是:DEBUG: resetting ordinals: 1 2 4 5 5
所以,没有任何废话少说,下面是我的问题:为什么是我的预期不同的实际输出?
void ll_fix(node_t* list)
{
node_t* root = list;
int ordinal = 0;
printf("DEBUG: resetting ordinals: ");
while(list->next != NULL)
{
list->ordinal = ordinal;
list = (node_t*)list->next;
printf("%d ",list->ordinal);
ordinal++;
}
printf("%d\n",list->ordinal);
list = root; // rewind the list
}
好点,编辑预期输出(代码复制粘贴,所以它是真正的代码)。 – 2012-03-18 21:52:58