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

反转链表 -- java

题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

链表节点定义如下:

public class ListNode {
    int value;
    ListNode next = null;

    public ListNode() {
    }

    public ListNode(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "ListNode{" +
                "value=" + value +
                '}';
    }
}

解题思路

  1. 定义指向反转链表的头指针指向当前节点、它的前一个节点、它的后一个节点的指针
  2. 循环链表中的节点
  3. 每次循环中,让当前节点指向前一个节点prev,之后把当前节点保存在prev中,以供下个节点使用

代码

public class ReverseList {
    public static ListNode reverseList(ListNode head) {
        if (head == null) {
            return null;
        }

        ListNode reversedHead = null;
        ListNode node = head;
        ListNode prev = null;

        while (node != null) {
            ListNode next = node.next;

            // 找到尾结点
            if (next == null) {
                reversedHead = node;
            }

            node.next = prev;
            prev = node;
            node = next;
        }

        return reversedHead;
    }

    // 测试
    public static void main(String[] args) {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);

        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;

        print_listNode(node1); // 反转前
        print_listNode(reverseList(node1)); // 反转后
    }

    // 打印listNode(用作测试)
    public static void print_listNode(ListNode listNode) {
        while (listNode != null) {
            System.out.print(listNode.value+" ");
            listNode = listNode.next;
        }
        System.out.println();
    }
}


来自:

《剑指Offer》
Coding-Interviews/反转链表.md at master · todorex/Coding-Interviews

相关文章:

  • 合并两个排序的链表 -- java
  • Mac上使用宁芝普拉姆键盘的记录
  • idea Mac格式化代码快捷键
  • 搜狗输入法关闭候选词中的图标只显示文字
  • Mac关闭idea的双击shift全局搜索功能
  • 树的子结构 -- java
  • 二叉树的镜像 -- java
  • java 遍历二叉树使用循环方式
  • 隐藏csdn博客的标题X条消息的方式
  • 对称的二叉树 -- java
  • 顺时针打印矩阵 -- java
  • 包含min函数的栈 -- java
  • 栈的压入、弹出序列 -- java
  • windows 远程桌面连接(mstsc)删除下拉框的记录
  • 用lunar怎么关闭MacBook的屏幕
  • hexo+github搭建个人博客
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【剑指offer】让抽象问题具体化
  • 03Go 类型总结
  • Angular Elements 及其运作原理
  • AWS实战 - 利用IAM对S3做访问控制
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • js ES6 求数组的交集,并集,还有差集
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Spring Cloud中负载均衡器概览
  • VuePress 静态网站生成
  • windows-nginx-https-本地配置
  • 阿里云应用高可用服务公测发布
  • 不上全站https的网站你们就等着被恶心死吧
  • 大整数乘法-表格法
  • 分享一份非常强势的Android面试题
  • 搞机器学习要哪些技能
  • 给初学者:JavaScript 中数组操作注意点
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 技术胖1-4季视频复习— (看视频笔记)
  • 开源地图数据可视化库——mapnik
  • 突破自己的技术思维
  • 函数计算新功能-----支持C#函数
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​低代码平台的核心价值与优势
  • #define用法
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (小白学Java)Java简介和基本配置
  • .Net 4.0并行库实用性演练
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET精简框架的“无法找到资源程序集”异常释疑