首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每天一道leetcode92-反转m到n处的链表

每天一道leetcode92-反转m到n处的链表

作者头像
乔戈里
发布于 2019-09-17 06:52:21
发布于 2019-09-17 06:52:21
1.1K00
代码可运行
举报
文章被收录于专栏:Java那些事Java那些事
运行总次数:0
代码可运行

题目

每天一道leetcode92-反转m到n处的链表 分类:链表 中文链接: https://leetcode-cn.com/problems/reverse-linked-list-ii/ 英文链接 https://leetcode.com/problems/reverse-linked-list-ii/

题目详述

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL

题目详解

思路

  • 分两种情况讨论哈,一种是m等于1的,一种是m不等于1的
  • m等于1的话,简单,就是一个反转链表,如何反转见这篇文章,之前写过;m等于1的话,先反转m-n这些节点,反转完成以后,一开始的头结点就成了最后一个节点,所以反转前把这个节点保留下来,然后反转结束以后把后面的连起来就行;
  • m不等于1的话,说明是反转的中间部分的这些节点,

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if(head == null || head.next == null)
            return head;
        if(m != 1)
        {
            ListNode temp = head.next;
            ListNode preFirst = head;//指向反转处的前一个节点值
            for(int i=0;i<m-2;i++)
            {
                temp = temp.next;
                preFirst = preFirst.next;
            }
            //从temp处开始反转链表;
            //由于temp是反转后的最后一个节点记录temp这个节点
            ListNode last = temp;
            ListNode pre = temp;//在这里开始反转链表 老套路
            ListNode pNode = temp.next;
            ListNode next = null;
            for(int i=0;i<n-m;i++)
            {
                next = pNode.next;
                pNode.next = pre;
                pre = pNode;
                pNode = next;
            }
            preFirst.next = pre;
            last.next = pNode;
        }else{
            ListNode pre = head;
            ListNode pNode = head.next;
            ListNode next = null;
            ListNode last = pre;//记录下来这个last节点;
            for(int i=0;i<n-m;i++)
            {
                next = pNode.next;
                pNode.next = pre;
                pre = pNode;
                pNode = next;
            }
            last.next = pNode;//反转后的最后一个节点连接上后续的节点
            return pre;//pre是反转后的头结点;
        }
        return head;
    }
}

代码讲解

  • 15-16行,一个temp是反转节点的开始的第一个,preFirst是temp节点的前一个节点,用来最后连接使用;
  • 17-21行 因为是从第m个节点开始,所以先去找到这个第m个节点;
  • 24-34行 就是反转链表了,不懂的看这篇文章,其中要注意的是,要把反转之前的第一个节点也就是m所在的节点保留下来,这样方便最后连接没反转的后一段部分的节点;
  • 35-36行 就是连接反转部分节点与前后两部分节点
  • 38-50行 就是反转前1-n个节点的代码,反转链表看之前的链接,然后需要注意的就是把第一个节点保留下来用来连接。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nacos架构与原理 - 通信通道
Nacos 1.x 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的。
小小工匠
2023/07/11
5300
Nacos架构与原理 - 通信通道
长连接和短连接区别和优缺点
优点:面向无连接,操作简单,要求系统资源较少,速度快,由于不需要连接,可进行广播发送
测试小兵
2020/12/02
3.2K0
长连接短连接的区别以及使用场景
长连接:是指在一个TCP连接上可以发送多个数据包,但是如果没有数据包发送时,也要双方发检测包以维持这个链连接
名字是乱打的
2022/05/13
3.5K0
如何优化高并发TCP链接中产生的大量的TIME_WAIT的状态
线上有几台QPS每秒几万请求的服务器,大致访问链路如下:client -> nginx -> web 服务器,由于每台机器上混布了多个web服务并通过nginx反向代理统一分发请求,在服务升级的时候经常出现端口被占用的情况,排查问题时,发现系统过存在几万多个 time_wait状态。统计命令如下:
我是攻城师
2020/02/25
28.5K3
探探的IM长连接技术实践:技术选型、架构设计、性能优化
本文由探探服务端高级技术专家张凯宏分享,原题“探探长链接项目的Go语言实践”,因原文内容有较多错误,有修订和改动。
JackJiang
2021/12/14
1.8K0
探探的IM长连接技术实践:技术选型、架构设计、性能优化
HTTP 长连接和短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 2. 如何理解HTTP协议是无状态的 HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页
joshua317
2018/04/16
3.7K0
HTTP 长连接和短连接
长连接和心跳的那些事儿
心跳和长连接在一起介绍的原因是,心跳能够给长连接提供保活功能,能够检测长连接是否正常(这里所说的保活不能简单的理解为保证活着,具体来说应该是一旦链路死了,不可用了,能够尽快知道,然后做些其他的高可用措施,来保证系统的正常运行)。
涤生
2018/08/14
1.5K0
分析 HTTP,TCP 的长连接和短连接以及 sock
HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议。IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP 有可靠,面向连接的特点。
杰哥的IT之旅
2020/06/18
5.2K0
分析 HTTP,TCP 的长连接和短连接以及 sock
一篇搞懂TCP、HTTP、Socket、Socket连接池
前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。
数澜科技
2019/10/17
2.7K0
手把手教你Socket短连接和长连接
本篇文章我们先从了解一下网络通信的基本常识,小鱼将会从Socket 逐步介绍短连接、长链接,以及长连接与短连接的选择。
鳄鱼儿
2024/06/10
1.5K0
手把手教你Socket短连接和长连接
TCP的长连接与短连接的含义与区别(附Java代码实现)
关于连接 TCP/IP通信方式分为连接与非连接型通讯方式 TCP:TCP是一种可靠通信,每次通信需要建立一个专门的通信链路 UDP:UDP通信是一种无连接方式,也称为Stateless,无需建立专门的
用户1257393
2018/03/21
10.3K0
TCP的长连接与短连接的含义与区别(附Java代码实现)
一篇搞懂TCP、HTTP、Socket、Socket连接池
前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。
用户8568307
2022/03/14
2K0
一篇搞懂TCP、HTTP、Socket、Socket连接池
PHP实时消息推送,你会不会用workerman
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。
友儿
2022/09/11
8990
基础巩固——长连接 、短连接、心跳机制与断线重连
本文将从长连接和短连接的概念切入,再到长连接与短连接的区别,以及应用场景,引出心跳机制和断线重连,给出代码实现。
Janti
2018/08/01
4.3K0
基础巩固——长连接 、短连接、心跳机制与断线重连
MySQL 线程池&连接池&长连接&短连接
线程池 简介 1、mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2、每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3、线程的创建和销毁有一定的开销 4、当线程数过多时,如果大部分线程都处于活跃状态,会导致频繁的上下文切换,从而造成系统巨大的开销 5、线程的本质就是线程共用,多个连接之间共享线程 何时使用 1、在有大量短查询的业务场景下 2、大量长查询的业务场景下不适合使用线程池,由于长查询占据了线程池的线程,导致线程池出现效率低下的情况 组成 1、线
lyb-geek
2022/03/10
2.1K0
浅谈TCP协议的长连接和短连接
HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默认都是长连接。那么长连接和短连接有什么不同呢?
闫同学
2023/12/06
1.4K4
长连接和短连接分析
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三
猿人谷
2018/01/17
3.6K0
长连接和短连接分析
聊聊 TCP 长连接和心跳那些事
可能很多 Java 程序员对 TCP 的理解只有一个三次握手,四次挥手的认识,我觉得这样的原因主要在于 TCP 协议本身稍微有点抽象(相比较于应用层的 HTTP 协议);其次,非框架开发者不太需要接触到 TCP 的一些细节。其实我个人对 TCP 的很多细节也并没有完全理解,这篇文章主要针对微信交流群里有人提出的长连接,心跳的问题,做一个统一的整理。
kirito-moe
2019/03/15
3.2K0
网络编程之Http、TCP/IP协议与Socket之间的区别
tcp协议: 对应于传输层 ip协议: 对应于网络层 TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
lyb-geek
2018/07/26
2.8K0
网络编程之Http、TCP/IP协议与Socket之间的区别
如何用 nodejs 编写TCP长连接应用
本文通过讨论TCP长连接的基本特性和原理,结合TCP应用层协议的设计给出一个基本的nodejs实现,供大家参考与探讨。
coder_koala
2019/12/20
2.4K0
如何用 nodejs 编写TCP长连接应用
推荐阅读
相关推荐
Nacos架构与原理 - 通信通道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档