Java实现单向链表反转

yizhihongxing

Java实现单向链表反转

1. 题目描述

给你一个单向链表的头节点,将这个链表反转。

例如:原链表为 1 --> 2 --> 3 --> 4,则反转后的链表为 4 --> 3 --> 2 --> 1。

2. 算法思路

我们可以让当前节点的 next 指针指向它前面的节点,由于单向链表没有指向前驱结点的指针,因此我们需要事先存储它前面的结点。在更改当前节点的 next 指针之前,还需要事先存储它后面的节点,以便在修改 next 指针之后能够继续遍历。

3. Java代码实现

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class Solution {
    // 单向链表反转
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode p = null, q = null;
        while (head != null) {
            q = head.next;
            head.next = p;
            p = head;
            head = q;
        }
        return p;
    }
}

4. 示例说明

示例一

原链表为 1 --> 2 --> 3 --> 4,执行代码:

ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);

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

ListNode reverseNode = new Solution().reverseList(node1);

while (reverseNode != null) {
    System.out.print(reverseNode.val + " ");
    reverseNode = reverseNode.next;
}

输出结果为:4 3 2 1

示例二

原链表为 10 --> 20 --> 30 --> 40,执行代码:

ListNode node1 = new ListNode(10);
ListNode node2 = new ListNode(20);
ListNode node3 = new ListNode(30);
ListNode node4 = new ListNode(40);

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

ListNode reverseNode = new Solution().reverseList(node1);

while (reverseNode != null) {
    System.out.print(reverseNode.val + " ");
    reverseNode = reverseNode.next;
}

输出结果为:40 30 20 10

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现单向链表反转 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Spring手动生成web.xml配置文件过程详解

    下面我将详细讲解“Spring手动生成web.xml配置文件过程详解”的完整攻略。 1. 什么是web.xml配置文件 web.xml是Java Web开发中非常重要的配置文件之一,它是Java Web应用程序的部署描述文件,定义了Web应用程序中的Servlet、Filter、Listener等组件及其映射关系和配置。 2. Spring手动生成web.x…

    other 2023年6月25日
    00
  • 安卓版qq4.6.2内测体验版 附Android版qq4.6.2安装包体验版下载地址

    安卓版QQ4.6.2内测体验版攻略 1. 下载安装包 首先,你需要下载安卓版QQ4.6.2内测体验版的安装包。你可以通过以下链接获取安装包: Android版QQ4.6.2内测体验版下载地址 2. 安装QQ4.6.2内测体验版 一旦你下载了安装包,你可以按照以下步骤来安装QQ4.6.2内测体验版: 在你的安卓设备上打开设置(通常是一个齿轮图标)。 滚动并找到…

    other 2023年8月4日
    00
  • 云原生要素配置分离ConfigMap创建方式

    下面是“云原生要素配置分离ConfigMap创建方式”的完整攻略: 什么是云原生要素配置分离? 在云原生架构中,配置管理是非常关键的一项工作。云原生要素配置分离指的是,将配置与应用程序本身分离,存储到 ConfigMap 中,将应用程序与其配置解耦。这样做的好处是,可以很方便地对应用程序进行升级、回滚或者替换,而无需重新配置应用。 创建 ConfigMap …

    other 2023年6月25日
    00
  • Qt实现右击菜单项

    实现右击菜单项在Qt中非常简单。主要的步骤包括: 创建菜单项 在需要展示该菜单项的控件上安装事件过滤器 监听右击事件 在右击事件处理函数中显示菜单 下面我们结合两个示例来具体介绍如何实现右击菜单项。 示例1:在QLineEdit控件上实现右击菜单项 代码如下: #include <QApplication> #include <QLineE…

    other 2023年6月27日
    00
  • IDEA2021常用优化设置步骤图解

    当然!下面是关于\”IDEA2021常用优化设置步骤图解\”的完整攻略: IDEA2021常用优化设置步骤图解 IntelliJ IDEA是一款功能强大的集成开发环境,提供了许多优化设置选项,可以提高开发效率和代码质量。下面是一些关于IDEA2021常用优化设置的详细步骤和示例说明: 步骤1:打开设置界面 首先,打开IntelliJ IDEA,并点击顶部菜单…

    other 2023年8月19日
    00
  • fragstats4.2各景观指数含义

    Fragstats4.2各景观指数含义攻略 什么是Fragstats4.2? Fragstats4.2是一款用于分析景观格局的软件,它可以计算各种景观数,包括斑块面积、斑块数量、边缘密度、分离度等。这些指数可以用于评估景观的复杂性、连通性、稳定性等方面的征。 Fragstats4.2各景观指数含义 以下是Fragstats4.2中常用的景观指数及其含义: 斑…

    other 2023年5月6日
    00
  • vue使用Swiper踩坑解决避坑

    Vue使用Swiper踩坑解决避坑攻略 1. 安装Swiper 首先,我们需要安装Swiper库。在Vue项目的根目录下,打开终端,运行以下命令安装Swiper: npm install swiper –save 2. 导入Swiper 在需要使用Swiper的组件中,导入Swiper库。在Vue项目中,一般在<script>标签中使用impo…

    other 2023年6月28日
    00
  • AE视频怎么分段渲染输出? ae导出单个或多个视频的教程

    标题:AE视频分段渲染输出攻略 什么是AE视频分段渲染输出? 在AE中,有些视频项目可能由于文件过大或过于复杂,导致在一次渲染中无法完成。这时就需要进行视频分段渲染输出,将较长的视频渲染成多个较短的细分视频,每个细分视频都可以自行进行渲染和输出。 怎么进行视频分段渲染输出? 步骤1:选择渲染队列面板 首先,在AE主界面选择上方的”窗口”菜单,找到”渲染队列”…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部