Reverse Linked List II 局部翻转链表@LeetCode

Synthea合成电子健康记录EHR数据集 使用开源合成患者生成器Synthea创建的电子健康记录EHR数据集,模拟真实患者病史,包含人口统计学信息、诊疗记录、疾病、药物、过敏、程序、护理计划和保险覆盖。由于数据完全合成,不包含真实患者健康信息PHI,不受隐私或HIPAA限制,适合作为研究、教育和机器学习实验的理想数据源。 立即下载

局部翻转,要点是:

1 利用dummy节点

2 记录4个关键位置:

  • 翻转区间前的最后一个未翻转节点 preBegin
  • 翻转区间,翻转后的第一个节点 reHead
  • 翻转区间,翻转后的最后一个节点 reverseEnd
  • 翻转区间后的第一个未翻转节点 postEnd

3 利用3指针(reHead, preCur, cur)翻转链表


package Level4;

import Utility.ListNode;

/**
 * Reverse Linked List II 
 * 
 * Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
 *
 */
public class S92 {

	public static void main(String[] args) {
		int[] list = {1,2,3};
		ListNode head = ListNode.create(list);
		ListNode h = reverseBetween(head, 1, 2);
		h.print();
	}

	public static ListNode reverseBetween(ListNode head, int m, int n) {
		ListNode dummy = new ListNode(-1);			// 利用dummy节点能方便地处理头结点问题!
		dummy.next = head;
		ListNode preBegin = dummy;			// preBegin记录翻转区间前一个元素
		int cnt = 1;
		while(preBegin!=null && cnt<m){	// 找到preBegin的位置
			preBegin = preBegin.next;
			cnt++;
		}
		
		ListNode reverseEnd = preBegin.next;		// 记录翻转区间内的最后一个节点,为了和下一个没翻转区间拼起来
		ListNode reHead = null;							// 翻转后的头
		ListNode cur = preBegin.next;
		cnt = 1;
		ListNode postEnd = null;						// 记录在翻转区间后面的 没翻转区间的第一个节点
		while(cur != null && cnt<=n-m+1){
			ListNode preCur = cur;
			cur = cur.next;
			if(cnt == n-m+1){
				postEnd = preCur.next;
			}
			preCur.next = reHead;
			reHead = preCur;
			cnt++;
		}
		
		preBegin.next = reHead;
		if(reverseEnd != null){
			reverseEnd.next = postEnd;
		}
		
		return dummy.next;
	}

}




/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode beforeM = dummy;
        int cnt = 1;
        while(cnt < m) {
            beforeM = beforeM.next;
            cnt++;
        }
        
        ListNode begin = beforeM.next;
        ListNode end = begin;
        while(cnt < n) {
            end = end.next;
            cnt++;
        }
        
        ListNode afterN = end.next;
        
        // Reverse between m to n
        ListNode tmp = beforeM;
        ListNode cur = begin;
        while(cur != afterN) {
            ListNode next = cur.next;
            cur.next = tmp;
            tmp = cur;
            cur = next;
        }
        
        beforeM.next = end;
        if(begin != null) 
            begin.next = afterN;
        
        return dummy.next;                          
    }
}




中小学管理平台规划建设方案Word(47页).docx 智慧方案是面向IT全行业打造的数字化落地支撑体系,依托物联网、大数据、人工智能等技术,覆盖小程序开发、智能安防、能源数字化、农机智慧管理等细分垂直场景,跳出通用模板的空泛框架,从业务痛点出发搭建从需求调研到上线运维的全链路执行路径,是技术人员排查项目问题、撰写合规标书、推进数据治理的实用工具。想精准匹配自己细分领域的专属IT智慧方案,直接进入找方案知识星球,垂直赛道专属方案库随查随用,不用在零散资料里反复筛选,快速拿到能直接落地的参考内容。 立即下载

相关推荐

智慧粮仓建设方案Word(74页).docx

智慧方案是面向IT全行业打造的数字化落地支撑体系,依托物联网、大数据、人工智能等技术,覆盖小程序开发、智能安防、能源数字化、农机智慧管理等细分垂直场景,跳出通用模板的空泛框架,从业务痛点出发搭建从需求调研到上线运维的全链路执行路径,是技术人员排查项目问题、撰写合规标书、推进数据治理的实用工具。想精准匹配自己细分领域的专属IT智慧方案,直接进入找方案知识星球,垂直赛道专属方案库随查随用,不用在零散资料里反复筛选,快速拿到能直接落地的参考内容。

局部反转链表(面试常考题)

一、题目描述 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 二、思路分析 局部反转链表是反转链表的升级版。 反转链表 反转链表,就是把每个结点 next 指针的指向给反过来就行了 需要用到三个指针,它们分别指向目标结点(cur)、目标结点的前驱结点(pre)

LYFlied的博客 1637

【计算机图形学】基于粒子系统的创意烟花实现:HTML5 Canvas、Three.js与Pygame多技术栈综合应用指南

内容概要:本文档系统讲解了创意版烟花的完整实现路径,从粒子系统原理出发,深入剖析烟花效果的五大核心阶段——上升、爆炸、扩散、衰减与拖尾,并基于四种技术栈(HTML5 Canvas、Three.js、Python Pygame、AI音乐节拍同步)提供可运行的完整代码方案。文档涵盖基础实现、视觉增强(形状变化、闪烁、二次爆炸)、交互升级(鼠标拖动、手势控制)、性能优化(对象池、渲染优化)、部署上线(GitHub Pages、Vercel)及创意拓展(文字烟花、数据可视化、协同互动),形成“原理→编码→调优→部署→创新”的闭环学习链路。同时融入Web Audio API节拍检测、滑动窗口动态阈值等实用算法,助力开发者打造兼具美观性与技术深度的动态视觉作品。; 适合人群:具备基础编程能力的前端开发者、Python爱好者、多媒体交互设计人员,以及希望提升图形编程与动效设计能力的工作1-3年研发人员;也适用于教学演示、作品集建设或创意项目原型开发。; 使用场景及目标:①掌握粒子系统在动画与游戏开发中的底层实现机制;②实现网页端与桌面端的高性能烟花特效;③构建音乐可视化、数据艺术、互动装置等融合型项目;④学习从代码实现到线上部署的全流程工程实践。; 阅读建议:建议按照“Canvas基础→进阶优化→3D/Pygame/AI扩展”的路径逐步实践,重点关注参数调优表与性能优化策略,在调试中理解每行代码的作用;对于音乐同步等复杂功能,可先运行成功案例再深入算法逻辑,结合实际项目需求灵活组合各项技术模块。

部分翻转链表

#include<iostream> using namespace std; const int maxn = 100; struct node { int data; node* next; }; typedef node* list; list insert(list a,int x) { if (a == NULL) { list temp = new node; temp->data = x; temp->next = a; a = temp; }

_计算机好苦 270

面试题—链表的‘部分’翻转

问题: 给出一个单链表(不带头节点)和一个数K,请翻转此单链表?例如:1->2->3->4->5 k = 0; 翻转过后:1->2->3->4->5 1->2->3->4->5K = 2; 翻转过后:2->1->4->3...

weixin_34088583的博客 757

牛客刷题--链表局部反转

题目描述 将给出的链表中的节点每\ kk个一组翻转,返回翻转后的链表 如果链表中的节点数不是\ kk的倍数,将最后剩下的节点保持原样 你不能更改节点中的值,只能更改节点本身。 要求空间复杂度\ O(1)O(1) 例如: 给定的链表是1\to2\to3\to4\to51→2→3→4→5 对于\ k = 2k=2, 你应该返回2\to 1\to 4\to 3\to 52→1→4→3→5 对于\ k = 3k=3, 你应该返回3\to2 \to1 \to 4\to 53→2→1→...

cracker_c博客 363

链表局部翻转

链表局部翻转 typedef struct listnode{ int data; struct listnode* next; }ListNode; void ReversePartList(ListNode** list, int m, int n){ ListNode* pre=NULL, *p=NULL, *q=NULL, *t=NULL,*k=NULL; int i = 1; ...

qq_39545674的博客 418

链表的部分翻转

对于一个链表,将他从第m个位置到第n个位置翻转 如 1 ——&gt;2-------&gt;3----------&gt;4-------&gt;5翻转为1--------&gt;3---------&gt;2--------&gt;4-------&gt;5 class Node():     def __init__(self,x):         self.value = x     ...

Modern_Times的博客 623

反转局部链表

leetcode官方头插法 基本思路:将局部需要翻转链表中,每一个元素依次放到需反转链表的头部,完成反转 var reverseBetween = function(head, left, right) { // 设置 dummyNode,避免讨论头节点为null的情况 const dummy_node = new ListNode(-1); dummy_node.next = head; let pre = dummy_node; // pre移动到需要反转链表

马航机长的博客 687

笔试题-链表部分翻转

遇到一道看似简单,然而实际操作起来却没那么简单的笔试题,现总结如下,虽然实现了功能,但却不知道是否是一个可行的优解,暂时记录一下。 题目描述: 将一个单向链表的第M个位置和第N个位置间的元素顺序倒转,输出倒转后的链表。 例如: 输入: 3 5 115822 9 5 0 说明:第一行的两个整数表示链表位置M,N;第二行表示链表元素M,N 输出: 11 5 9 22 8 ...

orangefly0214的博客 844

链表部分反转

链表部分反转

my9988的博客 1267

WorkBuddy - 副本2

WorkBuddy - 副本2

高校技术转移如何高效整合科研资源与产业发展需求?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

科技服务机构如何构建专业化的数智化服务体系?.docx

科技服务机构如何构建专业化的数智化服务体系?

国央企创新负责人如何实现技术成果的精准对接与快速落地?.docx

国央企创新负责人如何实现技术成果的精准对接与快速落地?

软胶囊机--全球软胶囊机市场深度解析:保健消费升级、技术创新与全球产业格局变化.docx

软胶囊机--全球软胶囊机市场深度解析:保健消费升级、技术创新与全球产业格局变化

产业园区如何提升科技创新服务能力?_1.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: Partition List 链表划分区间@LeetCode
下一篇: Merge k Sorted Lists 合并k个有序链表@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值