LeetCode 206. 反转链表

题目描述


分析

迭代代码与之前的K个一组翻转链表相同。

递归代码的一个首要任务是找到整个链表的尾结点(反转后的头结点)。

之后一步一步地将tail结点向前返回,但在返回的过程中不利用,只是传递最终答案。绿线的操作就是当head为正数第一个结点时的调用情况。

grq:递归的做法记得要将当前调用的head的指向置null,否则会出现链表中出现环的情况。


迭代代码(Java)
java 复制代码
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null) return head;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode first = head, second = first.next;
        // 若second为null说明当前的first是尾结点
        while (second != null) {
            ListNode secondNext = second.next;
            // 将后一位指向前一位
            second.next = first;
            // 两个指针后移,之后新增第三个指针
            first = second;
            second = secondNext;
        }
        dummy.next.next = null;
        dummy.next = first;
        return dummy.next;
    }
}
递归代码(Java)
java 复制代码
class Solution {
    public ListNode reverseList(ListNode head) {
	    // 判断到head.next为null就是尾结点
        if (head == null || head.next == null) return head;
        // 递归找到尾结点,保存用于反转后的头结点
        ListNode tail = reverseList(head.next);
        // 第一次是更改尾结点指向倒数第二个结点
        // 这里的head是倒数第二个结点
        head.next.next = head;
        // 将null转递下去,初始的头结点指向
        head.next = null;
        return tail;
    }
}
相关推荐
大大杰哥2 分钟前
leetcode hot100(1) 哈希
leetcode
爱写代码的倒霉蛋7 分钟前
2021天梯赛L2-4真题解析
数据结构·算法
hoiii1878 分钟前
基于CVX的储能调峰调频优化模型
算法
啦啦啦_999912 分钟前
KNN算法
算法
Engineer邓祥浩17 分钟前
LeetCode 热题 100 - 第1题:两数之和
算法·leetcode·职场和发展
white-persist18 分钟前
逆向入门经典题:从 IDA 反编译坑点到 Python 解题详细分析解释
c语言·开发语言·数据结构·python·算法·逆向·安全架构
炽烈小老头19 分钟前
【每天学习一点算法 2026/04/23】盛最多水的容器
学习·算法
Ailan_Anjuxi24 分钟前
手写数字识别零基础实战:基于PyTorch的CNN完整拆解
算法·图像识别
jiucaixiuyang26 分钟前
散户如何使用手机T0算法?
算法·量化·t0
阿Y加油吧38 分钟前
算法二刷复盘:LeetCode 79 单词搜索 & 131 分割回文串(Java 回溯精讲)
java·算法·leetcode