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

在这里插入图片描述
在这里插入图片描述

这个题的三个指针是有分工的,这样给指针进行分工的思想,更方便结构化的设计算法。
事实上,不管是什么题,我们都应该在设计算法的时候追求结构话和复用性,而不是就题论题,走一步看一步。
这道题的思想是这样的,我们给头指针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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值