6-1 单链表逆转 (20分)

tech2025-12-10  0

这个题的三个指针是有分工的,这样给指针进行分工的思想,更方便结构化的设计算法。 事实上,不管是什么题,我们都应该在设计算法的时候追求结构话和复用性,而不是就题论题,走一步看一步。 这道题的思想是这样的,我们给头指针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; }
最新回复(0)