当前位置: 首页 > news >正文

LeetCode 206. 反转链表

题目描述


分析

迭代代码与之前的K个一组翻转链表相同。
递归代码的一个首要任务是找到整个链表的尾结点(反转后的头结点)。
在这里插入图片描述

之后一步一步地将tail结点向前返回,但在返回的过程中不利用,只是传递最终答案。绿线的操作就是当head为正数第一个结点时的调用情况。
grq:递归的做法记得要将当前调用的head的指向置null,否则会出现链表中出现环的情况。
在这里插入图片描述


迭代代码(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)
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;
    }
}

相关文章:

  • 龙芯+FreeRTOS+LVGL实战笔记(新)——06添加二级按钮
  • 【运维监控】influxdb 2.0+telegraf 监控tomcat 8.5运行情况(2)
  • 微信小程序npm扩展能力探究
  • Java代理模式
  • VMware中共享文件夹没了怎么办?
  • Windows 系统中安装 PEM 证书
  • Linux环境下安装FFmpeg的教程
  • 【网络安全】DNS重绑定原理详析
  • 说一下解除docker限制内存警告
  • 风控——贷中管理介绍
  • ApplicationVerifier介绍说明
  • 设计模式之组合设计模式
  • 【机器人建模和控制】读书笔记
  • go语言给结构体绑定方法
  • IP网络广播服务平台upload接口存在任意文件上传漏洞
  • 【网络安全】学过编程就是黑客?
  • java:网络编程
  • Excel和Word日常使用记录:
  • vscode从本地安装插件
  • 【未解决】everything软件 中文文件夹 查找不到
  • 学习教育期间违规吃喝,李献林、叶金广等人被通报
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 李公明谈“全球南方”与美术馆
  • 铁路部门:确保沿线群众安全,焦柳铁路6个区段将陆续安装防护栅栏
  • 上海现有超12.3万名注册护士,本科及以上学历占一半
  • 马上评丨未成年人“擦边”短视频岂能成流量密码