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;
    }
}
相关推荐
海的诗篇_38 分钟前
移除元素-JavaScript【算法学习day.04】
javascript·学习·算法
自动驾驶小卡1 小时前
A*算法实现原理以及实现步骤(C++)
算法
Unpredictable2221 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
编程绿豆侠1 小时前
力扣HOT100之多维动态规划:1143. 最长公共子序列
算法·leetcode·动态规划
珂朵莉MM1 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
fail_to_code2 小时前
递归法的递归函数何时需要返回值
算法
C137的本贾尼2 小时前
(每日一道算法题)二叉树剪枝
算法·机器学习·剪枝
笑口常开xpr3 小时前
数 据 结 构 进 阶:哨 兵 位 的 头 结 点 如 何 简 化 链 表 操 作
数据结构·链表·哨兵位的头节点
BUG收容所所长4 小时前
栈的奇妙世界:从冰棒到算法的华丽转身
前端·javascript·算法