首页 > 其他分享 >BM2 链表内指定区间反转

BM2 链表内指定区间反转

时间:2023-05-06 19:33:10浏览次数:53  
标签:BM2 head ListNode int 反转 param 链表 res

描述

将一个节点数为 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<m≤n≤size,链表中每个节点的值满足 ∣val∣≤1000 要求:时间复杂度 O(n) ,空间复杂度 O(n) 进阶:时间复杂度 O(n),空间复杂度 O(1)  

示例1

输入:{1,2,3,4,5},2,4

返回值:{1,4,3,2,5}

示例2

输入:{5},1,1

返回值:{5}

 1 import java.util.*;
 2 
 3 /*
 4  * public class ListNode {
 5  *   int val;
 6  *   ListNode next = null;
 7  * }
 8  */
 9 
10 public class Solution {
11     /**
12      * 
13      * @param head ListNode类 
14      * @param m int整型 
15      * @param n int整型 
16      * @return ListNode类
17      */
18     public ListNode reverseBetween (ListNode head, int m, int n) {
19         // write code here
20         // 先找到m
21         ListNode res = new ListNode(-1);
22         res.next = head;
23 
24         ListNode pre = res;
25         ListNode cur = head;
26         
27         for(int i=1;i<m;i++){
28             pre = cur;
29             cur = cur.next;
30         }
31 
32         // 从m反转到n
33         for(int i=m;i<n;i++){
34             ListNode temp = cur.next;
35             cur.next = temp.next;
36             temp.next = pre.next;
37             pre.next = temp;
38         }
39         return res.next;
40     }
41 }

 

标签:BM2,head,ListNode,int,反转,param,链表,res
From: https://www.cnblogs.com/gol2q/p/17378296.html

相关文章

  • BM1 反转链表
    描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000要求:空间复杂度 O(1) ,时间复杂度 O(n) 。 如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转......
  • LeetCode 24. 两两交换链表中的节点
    题目链接:LeetCode24.两两交换链表中的节点本题不涉及算法,直接模拟就可以了,但是模拟的过程中,最好进行画图演示,不然容易出错。想要达到两两交换链表中节点的效果,就需要按照以下三个步骤进行。同时为了将头结点和非头结点统一处理,因此新建一个虚拟头结点,初始时,cur指向虚拟头结......
  • 合并k个已排序的链表
    描述合并k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围:节点总数 0≤n≤5000,每个节点的val满足∣val∣<=1000要求:时间复杂度 O(nlogn) 示例输入:[{1,2},{1,4,5},{6}]返回值:{1,1,2,4,5,6} 算法思想1、将k个链表两两进行合并(采用顺......
  • 集合、序列、链表进行过滤排序
    C#有Linq对list等数据的排序过滤等操作java有stream()php也有第三方库phpLinq,或array_filter()、array_search()、array_map()等也行。.....------------它们都是,配合一个方法或函数(可以匿名函数和lambda表达式),进行过滤. 相关:  https://www.bilibili.com/video/BV1B5......
  • 单链表
    单链表的每个结点,包含值和链接到下一个结点的引用字段。//definitionforsingly-linkedlist.structSinglyListNode{intval;SinglyListNode*next;SinglyListNode(intx):val(x),next(Null){}//用头结点来表示整个列表};与数组不同,我们无法在常量时间内访......
  • LeetCode 206. 反转链表
    题目链接:LeetCode206.反转链表本题是链表题目中非常重要的一道题目--反转指针。解题方法有两种:1.双指针法2.递归法首先看双指针法:快指针总是在慢指针的前面,也就是每次将快指针的节点的next指针更新成指向慢指针,这样不就进行了反转嘛。完整代码如下:funcreverseList(hea......
  • LeetCode 203. 移除链表元素
    题目链接:LeetCode203.移除链表元素本题是一个经典的单链表删除元素的题目,主要注意的有两点:如果删除的元素是不是头元素,则直接p.Next=p.Next.Next即可如果删除的元素是头元素,则需要进行单独的处理forhead!=nil&&head.Val==val{head=head.Next}ifh......
  • 合并两个排序的链表
    描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0≤n≤1000,−1000≤节点值≤1000要求:空间复杂度 O(1),时间复杂度 O(n) 如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6} ......
  • 力扣141(Java)-环形链表(简单)
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递 。仅仅是为了标识......
  • ds:带头结点的单链表与不带头结点的单链表区别
     写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。 一、带头结点的单链表头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据初始化:malloc申请空间后要L->next=NULL......