zoukankan      html  css  js  c++  java
  • 递归实现单链表的反转

    递归实现单链表的反转


    链表反转

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

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

        代码如下:
        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

  • 相关阅读:
    Elastic Search快速上手(2):将数据存入ES
    汇编学习笔记(24)
    汇编学习笔记(23)
    汇编学习笔记(22)
    汇编学习笔记(21)
    汇编学习笔记(20)
    汇编学习笔记(19)
    汇编学习笔记(18)
    汇编学习笔记(17)
    汇编学习笔记(16)
  • 原文地址:https://www.cnblogs.com/gujiewei/p/9670566.html
Copyright © 2011-2022 走看看