这个题的三个指针是有分工的,这样给指针进行分工的思想,更方便结构化的设计算法。
事实上,不管是什么题,我们都应该在设计算法的时候追求结构话和复用性,而不是就题论题,走一步看一步。
这道题的思想是这样的,我们给头指针L叫了两个兄弟,runner和breaker。
故名思意,这两个指针是有分工的,一个负责前进,一个负责断链。
每次我们让runner走到L的下一格子。
当breaker在L的后一格时,会将它通向L的桥调转方向,如果它改变了方向,那么就让它追上L。
可是L自然不喜欢和这个拆桥的同位,所以L向runner的格子跑去。
runner不想让任何人超过他,所以跑到下一个格子。
breaker看到L跑了,赶紧拆了桥跟上。
。。。。。。
于是乎就形成了拆桥大队的可循环系统,当L掉下桥时(指向NULL),返回函数。
List Reverse( List L ){
PtrToNode runner = NULL;
PtrToNode breaker = NULL;
while(L!=NULL){
runner = L->Next; //runner摆脱L先行
L->Next = breaker; //breaker拆桥变向
breaker = L; //breaker跟上
L = runner; // L追上runner
}
return breaker;
}