我知道遍历我可以做一个临时链表去:如何遍历c中的链接列表而不会在C中销毁它?
while (temp->next!=NULL){
...}
但是,如果我想改变我的实际列表中的一个位置,同时穿越它是什么? 我能想到的唯一方法是从头部遍历实际的链表,但是不会在链表到达结尾后破坏我的链表?
我知道遍历我可以做一个临时链表去:如何遍历c中的链接列表而不会在C中销毁它?
while (temp->next!=NULL){
...}
但是,如果我想改变我的实际列表中的一个位置,同时穿越它是什么? 我能想到的唯一方法是从头部遍历实际的链表,但是不会在链表到达结尾后破坏我的链表?
假设你有一个清单myList
,并myList.head
指向第一个元素:
temp = myList.head;
while (temp->next!=NULL){
// do stuff with this element
...
temp = temp->next; // get the next element
}
现在你可以去右后卫,做一遍 - myList
仍然是相同的,并且
temp = myList.head;
让你重新回到起点。
看起来像'for'循环:'for(node * p = myList.head; p-> next; p = p-> next){/ * ... * /}' –
@KerrekSB你是对的,会使意图更清晰。我更喜欢显式条件'p-> next!= NULL;'隐含'!p-> next;'(我想你忘了'!'),但这是一个风格问题。 – Floris
它也会泄漏更少的范围,并使多个连续点的错误更少发生:-) –
保留你开始点的副本,你会没事的。 – Floris
@弗洛伊斯嗯,然后呢? – Pig
制作初始指针的副本。使用此副本以相同的方式进行迭代。最初的指针现在没有被触及,没有任何东西被“销毁”。 – Sinkingpoint