递归实现单链表的反转

递归实现单链表的反转


链表反转

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

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

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

posted @ 2018-08-30 21:06  顾杰伟  阅读(380)  评论(0编辑  收藏  举报