链表反转递归求解(刷题笔记)

46 阅读1分钟

其实这个题我上学期上算法实验课的时候做过,只不过当时还没开始学java,用c写的,现在刷LeetCode简单题又刷到了,再这总结一下。不知道我理解的对不对,有问题可以私信我。

递归的两个条件:

终止条件是当前节点或者下一个节点为null 在函数内部,改变节点的指向,也就是 head 的下一个节点指向 head 递归函数

画的图解:

代码:

class Solution {
    public ListNode trainningPlan(ListNode head) {
        //递归终止条件是当前为空,或者下一个节点为空
        if(head == null || head.next == null){
            return head;
        }
        //递归调用来反转每一个节点
        ListNode cur = reverseList(head.next);
        //每一个节点是怎么反转的
        head.next.next = head;
        //防止链表循环,需要将head . next设置为空
        head.next = null;
        //每层递归函数都返回cur, 也就是最后一个节点
        return cur;
    }
}

先到这了我要先把java课程全部赶完先,还有这个学期的计算机组成原理和计算机网络感觉都挺难的,靠我们学校的老师是不行了一天天只会吹牛浑水摸鱼讲个啥也不知道,还有操作系统我想我得找个网课上起来,所以每天刷题刷的会少一点。