2014-02-13 47 views
0

我知道遍历我可以做一个临时链表去:如何遍历c中的链接列表而不会在C中销毁它?

while (temp->next!=NULL){ 
    ...} 

但是,如果我想改变我的实际列表中的一个位置,同时穿越它是什么? 我能想到的唯一方法是从头部遍历实际的链表,但是不会在链表到达结尾后破坏我的链表?

+1

保留你开始点的副本,你会没事的。 – Floris

+0

@弗洛伊斯嗯,然后呢? – Pig

+3

制作初始指针的副本。使用此副本以相同的方式进行迭代。最初的指针现在没有被触及,没有任何东西被“销毁”。 – Sinkingpoint

回答

1

假设你有一个清单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; 

让你重新回到起点。

+1

看起来像'for'循环:'for(node * p = myList.head; p-> next; p = p-> next){/ * ... * /}' –

+0

@KerrekSB你是对的,会使意图更清晰。我更喜欢显式条件'p-> next!= NULL;'隐含'!p-> next;'(我想你忘了'!'),但这是一个风格问题。 – Floris

+1

它也会泄漏更少的范围,并使多个连续点的错误更少发生:-) –