当前位置:网站首页>牛客每日刷题之链表
牛客每日刷题之链表
2022-08-02 21:22:00 【_18shou】
作者简介:我是18shou,一名即将秋招的java实习生
个人主页:_18shou
系列专栏:牛客刷题专栏
推荐一款模拟面试、刷题神器 在线刷题面经模拟面试
目录
题目

描述
将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。例如:
给出的链表为1→2→3→4→5→NULL, m= 2,n = 4,返回1→4→3→2→5→NULL.
数据范围:链表长度0<size ≤1000,0 < mSn ≤ size,链表中每个节点的值满足|oal|< 1000要求:时间复杂度O(n),空间复杂度O(n)
进阶:时间复杂度O(n),空间复杂度O(1)
思路
要反转局部链表,可以将该局部部分当作完整链表进行反转
再将已经反转好的局部链表与其他节点建立连接,重构链表
建议使用虚拟头节点的技巧,可以避免对头节点复杂的分类考虑,简化操作。
题解
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
// 解法一:双指针(两次遍历)
//说明:方便理解,以下注释中将用left,right分别代替m,n节点
public ListNode reverseBetween (ListNode head, int m, int n) {
//设置虚拟头节点
ListNode dummyNode = new ListNode(-1);
dummyNode.next = head;
ListNode pre = dummyNode;
//1.走left-1步到left的前一个节点
for(int i=0;i<m-1;i++){
pre = pre.next;
}
//2.走roght-left+1步到right节点
ListNode rigthNode = pre;
for(int i=0;i<n-m+1;i++){
rigthNode = rigthNode.next;
}
//3.截取出一个子链表
ListNode leftNode = pre.next;
ListNode cur = rigthNode.next;
//4.切断链接
pre.next=null;
rigthNode.next=null;
//5.反转局部链表
reverseLinkedList(leftNode);
//6.接回原来的链表
pre.next = rigthNode;
leftNode.next = cur;
return dummyNode.next;
}
//反转局部链表
private void reverseLinkedList(ListNode head){
ListNode pre = null;
ListNode cur = head;
while(cur!=null){
//Cur_next 指向cur节点的下一个节点
ListNode Cur_next = cur.next;
cur.next = pre;
pre = cur;
cur = Cur_next ;
}
}
}
复杂度
时间复杂度:O(N)其中N是链表总节点数。最坏情况下,需要遍历整个链表
空间复杂度O(1)仅使用到常数个变量

结语
兄弟们,一起来刷题嘎嘎的写题
边栏推荐
- Bee 事务注解 @Tran 使用实例
- 快速构建电脑软件系统 、超好用经典的网页推荐汇总
- LeetCode 2360. 图中的最长环 基环树找环+时间戳
- .NET performance optimization - you should set initial size for collection types
- The interviewer asked me: delete library, in addition to run do?
- 快速学会ansible的安装
- 汇编语言中b和bl关键字的区别
- Electrical diagram of power supply system
- 手把手教你干掉if else
- C primer plus学习笔记 —— 9、联合&枚举&typdef
猜你喜欢
随机推荐
解道7-编程技术4
[C题目]力扣1. 两数之和
包管理工具Chocolate - Win10如何安装Chocolate工具、快速上手、进阶用法
golang 刷leetcode:统计打字方案数
最近火爆朋友圈的“广告电商”,核心商业模式是什么,广告收入真实靠谱吗?
Use the TCP protocol, we won't lost package?
【STM32学习3】DMA基础操作
golang刷leetcode:巫师的总力量和
golang刷leetcode: 卖木头块
I interviewed a 985 graduate, and I will never forget the expression when answering the "performance tuning" question
模糊查询like用法实例(Bee)
How to seize the new trend of NFT, yuan|universe|universe?
Flink优化的方方面面
SSM整合步骤(重点)
golang刷leetcode: 小于等于 K 的最长二进制子序列
字节内部技术图谱 惊艳级实用
Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
二叉搜索树的实现
单例模式你会几种写法?
Intensive reading of the Swin Transformer paper and analysis of its model structure








