【面试必刷TOP101】反转链表 链表内指定区间反转

news2024/11/25 6:54:55

目录

题目:反转链表_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

题目:链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:反转链表_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import "fmt"
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
*/
func ReverseList( head *ListNode ) *ListNode {
    // write code here
}

解题思路:

这道题我能想到两个思路,第一个思路是不断遍历原链表,然后通过尾插的方式新建一个链表,但是这样的时间复杂度会变得很高,因为我们需要从遍历找尾开始,再尾插,而且代码也比较繁杂。

第二个方法就是通过反转指针的方式,只需要遍历一次链表,将每一个节点的指针反转过来就行了,具体操作是这样的:用 pNext 记录下一个节点,让当前节点指向 newNode, 如图:

第一步:(head 从指向 pNext 改成指向 newNode)

也就是现在的新链表是这样的:

第二步:(newNode = head,让 newNode 更新成新链表的头节点)

最后再让 head = pNext,就能继续往后遍历链表了。

代码:

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
*/
func ReverseList( head *ListNode ) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }

    var newHead *ListNode
    for head != nil {
        pNext := head.Next   // 保存下一个节点
        head.Next = newHead; // 将当前节点指向一个新节点
        newHead = head       // 更新反转链表
        head = pNext         // 更新当前节点
    }

    return newHead
}

过啦!!!

题目:链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
*/
func reverseBetween( head *ListNode ,  m int ,  n int ) *ListNode {
    // write code here
}

解题思路:

这道题的核心思路如下:

首先先找到需要反转节点的位置,然后开始操作:

pre 节点作为反转链表的前一个节点,并保持不变,cur 节点作为反转链表的第一个节点,tmp 节点不断将下一个节点转移到前面,也就是反转的过程,我们以题目的样例为例:

进行一次操作之后,pre 保持在反转链表的前一个节点,cur 保持在反转链表的头结点位置,tmp 就出现在下一个节点的位置,而 3 节点就被反转到了前面

继续进行操作:

还是一样的:

代码:

package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
*/
func reverseBetween( head *ListNode ,  m int ,  n int ) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }

    // 找到反转链表的起始位置的前一个位置
    Node := &ListNode{ Next: head, }
    pre := Node
    for i := 1; i < m; i++ {
        pre = pre.Next
    }

    // 反转操作的主逻辑
    cur := pre.Next
    for i := m; i < n; i++ {
        tmp := cur.Next
        cur.Next = tmp.Next
        tmp.Next = pre.Next
        pre.Next = tmp
    }

    return Node.Next
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肖sir__mysql之安装__002

mysql之安装 1、rpm -qa|grep mysql 2.删除mysql的方法&#xff1a; 第一种&#xff1a;yum remove mysql * &#xff08;*表示所有&#xff09; 第二种&#xff1a;rpm -e --nodeps 包名 强制删除mysql包 3、删除干净mysql文件&#xff0c;在进行安装 yum install mysql 安装…

MAML在隐式神经表示中的应用

论文 Learned Initializations for Optimizing Coordinate-Based Neural Representations &#x1f383;Abstract1. Introduction2. Related Work3. Overview ⭐4. Results5. Conclusion6. AcknowledgementsA. Implementation details Implicit Neural Representations for Ima…

Linux IO函数

read/write函数&#xff1a; 1.read #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 参数&#xff1a; -fd&#xff1a;文件描述符&#xff0c;open得到的&#xff0c;通过这个文件描述符操作某个文件 -buf&#xff1a;需要读取数据存放的地方…

3D虚拟情景实训教学系统在法律课堂中的应用

3D虚拟情景实训教学系统是一种基于虚拟现实技术的教育工具&#xff0c;它通过模拟真实的法律场景&#xff0c;让学生能够身临其境地体验法律实践。这种教学方式可以让学生更加深入地理解法律原则和规则&#xff0c;提高他们的法律素养和实践能力。 在传统的法律课堂中&#xff…

一文了解国自然热点“超级增强子”的重要标记——H3K27ac

2023国自然结果已经揭晓&#xff0c;“超级增强子”&#xff08; Super enhancer, SE&#xff09;作为国自然新热点&#xff0c;2023年项目为32个。2019-2023年来总累计项目143项&#xff0c;但累计项目金额达6033万。此外&#xff0c;Pubmed数据统计显示5年间SE影响因子大于10…

二叉树【树的基本概念】

全文目录 树树的概念树的相关概念树的表示树的实际应用 二叉树二叉树的概念二叉树的特殊类型二叉树的性质二叉树的存储结构顺序存储链式存储 堆堆的概念向下调整算法向上调整算法堆的插入堆的删除堆的构建时间复杂度计算 堆排序TOP-K问题 树 树的概念 树是一种非线性的数据结…

华为CD32键盘使用教程

华为CD32键盘使用教程 用爱发电写的教程&#xff01; 最后更新时间&#xff1a;2023.9.12 型号&#xff1a;华为有线键盘CD32 基本使用 此键盘在不安装驱动的情况下可以直接使用&#xff0c;但是不安装驱动指纹识别是无法使用的&#xff01;并且NFC功能只支持华为的部分电脑…

固定资产预算怎么管理的

在现代企业管理中&#xff0c;固定资产预算的管理是一项至关重要的任务。它不仅关系到企业的经济效益&#xff0c;更关系到企业的长远发展。那么&#xff0c;如何进行有效的固定资产预算管理呢&#xff1f; 明确固定资产预算的目标和原则  我们需要明确固定资产预算的目标和…

HCS 中的一些概念(二)

一、Service OM 1、首页&#xff08;资源状态&#xff09; 2、服务列表 计算资源&#xff1a;计算资源又分为可用分区&#xff08;AZ&#xff09;、规格和虚拟机组&#xff0c;可在此处创建虚拟机、虚拟机组、主机组和规格 网络资源&#xff1a;网络资源又分为物理网络…

使用融云 CallPlus SDK,一小时实现一款 1V1 视频应用

9 月 21 日&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击小程序报名~ 1V1 音视频、远程服务类应用的实现利器——融云 CallPlus SDK 上线&#xff01; 关注【融云全球互联网通信云】了解更多 作为新一代音视频通话场…

Transformer模型 | 个人理解

一、Transformer整体架构图 二、Encoder端的输入 以机器翻译任务为例子&#xff0c;训练数据是法语句子“Je suis etudiant”和翻译成英文后的句子“I am a student”。 Inputs是法语句子“ J e {Je } Je s u i s {suis} suis e t u d i a n t {etudiant} etudiant”&#x…

9月16日相约openGauss Meetup(杭州站)

由云和恩墨、图尔兹、浙江鲲鹏、openGauss社区联合主办的“openGauss Meetup &#xff08;杭州站&#xff09;”活动将于9月16日在杭州市拱墅区祥园路108号中国智慧信息产业园G座3楼连廊1号会议室举办&#xff01;我们诚邀您的莅临&#xff01; 扫码报名 数据库作为企业核心的重…

Jetty服务器好处

Jetty可以同时处理大量连接而且可以长时间保持连接&#xff0c;适合于web聊天应用等等。 Jetty的架构简单&#xff0c;因此作为服务器&#xff0c;Jetty可以按需加载组件&#xff0c;减少不需要的组件&#xff0c;减少了服务器内存开销&#xff0c;从而提高服务器性能。 Jetty默…

最新遥感数据与作物模型同化教程

详情点击公众号链接&#xff1a;最新遥感数据与作物模型同化教程一&#xff1a;遥感基础1.遥感平台&#xff08;如无人机&#xff09;与传感器、国内外主要陆地卫星&#xff08;如Landsat、SPOT、HJ、GF&#xff09; 2.遥感基本原理、光谱响应函数、遥感数据处理流程 3.遥感在陆…

接口自动化测试的概述及流程梳理~

接下来开始学习接口自动化测试。 因为之前从来没接触过&#xff0c;所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口&#xff0c;又叫API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;&a…

Java“牵手”天猫商品详情数据,天猫商品详情接口,天猫API接口申请指南

天猫平台API是天猫应用程序编程接口的缩写&#xff0c;它是一套允许程序员从他们的应用程序中访问天猫网站上数据的规范。通过API&#xff0c;程序员可以编写能够与天猫网站交互的程序&#xff0c;从而绕过网页浏览器的限制&#xff0c;直接访问和操作数据。 天猫平台API可以提…

模拟考试系统提升备考效果和成功机会

备考是每位参加考试的学生都非常重视的阶段。为了提高备考效果和增加成功机会&#xff0c;模拟考试系统是一种非常有效的工具。 备考对于任何一位参加考试的学生来说都是至关重要的阶段。无论是应对学校期末考试、入学考试还是国家级考试&#xff0c;备考都需要充分的准备和调…

怎样建立一个班级查分系统?

在现代教育中&#xff0c;建立一个高效的班级查分系统对于老师和家长们来说至关重要。物种草作为一款功能强大的在线教育工具&#xff0c;为教师们提供了一个便捷的方式来管理和分享学生成绩。本文将以物种草的口吻&#xff0c;为你介绍如何建立一个高效的班级查分系统&#xf…

javascript二维数组按指定要求进行对象合并遍历的算法开发

javascript二维数组按指定要求进行对象合并遍历的算法开发 项目原数据项目需求数据格式算法开发 项目原数据 从第三方API获取如何格式的数据&#xff1a; “device”: “二(1)班”,不同班级名称&#xff0c;会重复“name”: “二(1)班-电量”,不同班级的数据标准“value”: 1…

如何初始化静态成员在类中

c - How do I initialize a const data member? - Stack Overflow