Java实现单向链表反转

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日

相关文章

  • 学习使用Bootstrap页面排版样式

    学习使用Bootstrap页面排版样式攻略 Bootstrap是一个流行的前端开发框架,它提供了一套强大的页面排版样式,可以帮助开发者快速构建美观且响应式的网页。下面是学习使用Bootstrap页面排版样式的完整攻略。 步骤一:引入Bootstrap 首先,你需要在你的HTML文件中引入Bootstrap。你可以通过以下方式引入: <!DOCTYPE …

    other 2023年8月18日
    00
  • h5入门基础(一)

    以下是“H5入门基础(一)”的详细讲解,包括H5的概述、H5的文档结构、H5的常用标签和属性等内容,其中包含了两个示例说明: H5入门基础(一) HTML5(简称H5)是HTML的第五个版本,是一种用于创建Web页面和应用程序的标准。相比于之前的HTML版本,H5提供了更多的语义化标签、多媒体支持、离线存储、Web应用程序等功能。本文将介绍H5的基础知识,包…

    other 2023年5月10日
    00
  • Cenots7 离线安装部署PostgreSQL 的详细过程

    当在CentOS 7上进行离线安装和部署PostgreSQL时,可以按照以下步骤进行操作: 下载PostgreSQL安装包: 首先,访问PostgreSQL官方网站(https://www.postgresql.org/download/linux/redhat/)并找到适用于CentOS 7的安装包。 选择与您的系统架构(32位或64位)和版本相对应的安装…

    other 2023年10月18日
    00
  • Android自定义标尺滑动选择值效果

    接下来我将为你详细讲解如何实现Android自定义标尺滑动选择值效果。 1. 概述 在Android开发中,我们经常需要使用到一些具有特定样式的滑动控件,例如标尺滑动选择值控件。而在实现这样的控件时,最简单的方法就是使用已有的控件,并对其进行自定义。 2. 准备工作 我们首先需要创建一个自定义控件类,例如RulerSeekBar,继承自SeekBar。接下来…

    other 2023年6月25日
    00
  • vue+iview分页组件的封装

    下面将详细讲解vue+iview分页组件的封装。 一、分页组件介绍 在前端开发中,经常需要用到分页组件,用于将数据分页展示。iview是一套基于 Vue.js 的开源 UI 组件库,内置了丰富的组件,包括分页组件。iview分页组件具有易用、美观、可定制性强等优点。因此,本文以iview分页组件为例,介绍Vue+iview分页组件的封装。 二、组件封装 1.…

    other 2023年6月25日
    00
  • Linux 下 安装jdk 1.7

    在Linux下安装JDK 1.7的过程相对简单,但是需要注意一些细节。下面是Linux下安装JDK 1.7的完整攻略。 下载JDK 1.7 在Oracle官网下载页面(https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html)下载JDK 1.7的Linux版本…

    other 2023年5月5日
    00
  • 为什么有mac地址还需要有IP地址呢

    为什么有MAC地址还需要有IP地址呢? 在计算机网络中,MAC地址和IP地址都是用于标识网络设备的重要信息。尽管它们都有类似的功能,但它们在网络通信中扮演着不同的角色。下面将详细讲解为什么需要同时使用MAC地址和IP地址,并提供两个示例说明。 MAC地址的作用 MAC地址(Media Access Control Address)是一个全球唯一的硬件地址,由…

    other 2023年7月30日
    00
  • Java预览PDF时的文件名称问题及解决

    Java预览PDF时的文件名称问题及解决 当我们使用Java代码预览PDF文件时,经常会遇到文件名乱码或者无法显示的问题,这是由于文件名编码问题导致的。在这里,我们提供两种解决方案。 方案一:使用Apache PDFBox Apache PDFBox是一个流行的Java库,可以用于读取、创建和操作PDF文档。在使用Apache PDFBox预览PDF时,我们…

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