递归实现单链表的反转

递归实现单链表的反转


链表反转

之前用迭代实现了链表反转,受同学启发,也可以用递归方式实现,如下。
对于链表结构,还是采用单链表的反转里面的结构。

注意:
由于递归的操作是规模缩小,操作重复的,所以递归时直接从第一个数据结点开始(不是从空的头结点开始),虽然可以每次回溯时都让。

    代码如下:
    public void reverse2(Node datahead){
        //递归一直到最后一个结点,此时将head头结点指向末尾,末尾数据结点变成新的头数据结点
        if(datahead.next==null){
            root.next=datahead;
            return ;
        }
        //保存该结点的下一个结点
        Node secondnext=datahead.next;
        reverse2(secondnext);
        //改变相邻结点的方向
        secondnext.next=datahead;
        //新的数据结点置为空,不然遍历死循环。
        datahead.next=null;
    }

示例图:
1.一直递归压栈,直到回归条件
image_1cm5ejea41d763nm1oro1m0qv1d3a.png-9.8kB
2.开始执行递归后面的语句,进行弹栈回溯
image_1cm5erjnn1vjo12625au20413sp3n.png-7.4kB
一直到最后数据结点方向完全改变:
image_1cm5et1pg1l7gt8g1prk14jp130o44.png-7.1kB

转载于:https://www.cnblogs.com/gujiewei/p/9670566.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值