反转链表 - LeetCode 热题 23

news/2024/7/24 9:35:07 标签: 链表, leetcode, 数据结构

大家好!我是曾续缘💗

今天是《LeetCode 热题 100》系列

发车第 23 天

链表第 2 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

 

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

 

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

 

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

难度:❤️

解题方法

题目要求反转一个单链表。可以使用迭代或递归两种方法来解决。

迭代法通过遍历链表,依次将每个节点的指针指向前一个节点来实现链表反转。

  1. 初始化三个指针:prev指向前一个节点,current指向当前节点,next指向当前节点的下一个节点。

  2. 遍历链表,当current不为null时执行以下操作:

    • current.next指向前一个节点,即将当前节点的指针反转。
    • 更新指针,将prev指向当前节点,将current指向下一个节点,将next指向下一个节点的下一个节点。
  3. 遍历结束后,返回新的头节点,即原链表的尾节点。

递归法可以通过递归地调用函数来实现链表的反转。

  1. 如果链表为空或只包含一个节点,则直接返回该链表
  2. 假设传入的链表的头节点为head,递归调用函数reverseList(head.next)来反转以头节点之后的链表
  3. 将头节点的下一个节点的next指向头节点,将头节点的next指向null,完成头节点的反转。
  4. 返回反转后的新头节点。

Code

递归法

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }
}

迭代法

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode current = head;

        while (current != null) {
            ListNode next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }

        return prev;
    }

}

http://www.niftyadmin.cn/n/5470555.html

相关文章

uniapp 设置globalStyle navigationBarTitleText 不显示

设置全局的navigationBarTitleText但是没有显示 没效果: 原因: 这里实际上设置了navigationBarTitleText 为"" 所以不会使用全局的设置 解决方法就是直接将这一行代码删除

基于AI智能识别技术的智慧展览馆视频监管方案设计

一、建设背景 随着科技的不断进步和社会安全需求的日益增长&#xff0c;展览馆作为展示文化、艺术和科技成果的重要场所&#xff0c;其安全监控系统的智能化升级已成为当务之急。为此&#xff0c;旭帆科技&#xff08;TSINGSEE青犀&#xff09;基于视频智能分析技术推出了展览…

213 基于matlab的圆柱齿轮传动的几何规划

基于matlab的圆柱齿轮传动的几何规划、两级斜齿轮传动优化设计、螺旋起重器设计计算、蜗杆传动优化设计(蜗轮齿圈体积最小)结构设计计算。用于机械结构中零件的优化分析。程序已调通&#xff0c;可直接运行。 213 蜗杆传动优化设计 matlab - 小红书 (xiaohongshu.com)

大意了MySQL关键字EXPLAIN

一、问题 然后explain带了单引号、以区别其关键字 二、报错如下 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near explain, us.nickname AS user_send_nickname, ua.nickname…

【数据结构(一)】初识数据结构

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.集合架构3.时间和空间复杂度3.1算法效率3.2时间复杂度3.2.1大O的渐进…

基于spring boot的漫画之家系统

基于spring boot的漫画之家系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&…

读《Spring实战》:面向切面

AOP术语 通知&#xff08;Advice&#xff09; 在AOP中&#xff0c;切面的工作被称为通知&#xff0c;也就是通知就是具体要干的工作。 spring中有5中通知&#xff1a; 前置通知&#xff1a; 在目标方法之前调用通知功能后置通知&#xff1a; 在目标方法之后调用通知功能返回…

数据库安装的一些内容

这两天在研究整理上课数据库和web要求安装操作的软件 晚点再写下去 1.SQL server 2012 安装的过程中出现不少问题&#xff0c;根据网上的教程以及老师发的实验指导书首先安装SQL server (1)在安装规则检测之后&#xff0c;没有按照步骤进入下一步——设置角色&#xff1b; …