当前位置: 首页 > news >正文

《算法通关村第二关——指定区间反转问题解析》

《算法通关村第二关——指定区间反转问题解析》

题目描述

给你单链表的头指针head和两个整数left和right,其中left <= right 。 请你反转从位置left到位置right的链表节点,返回反转后的链表。

示例1:
输入: head = [1,2,3,4,5],left = 2, right = 4
输出: [1,4,3,2,5]

头插法

通过一个一个插入前面进行反转。

在这里插入图片描述

代码:

/*** 头插法指定区间反转* @param head* @param start就是题中的left* @param end 题中的right* @return*/
public static LinkedNode ReverseSpecificInterval1(LinkedNode head , int start,int end){// 设置dummyNode 是这类问题的一般解法LinkedNode dummyNode = new LinkedNode(-1);dummyNode.setNext(head);LinkedNode pre = dummyNode;for(int i = 0 ; i < start - 1 ; i++){pre = pre.getNext();}LinkedNode cur = pre.getNext();LinkedNode next = null;for(int i = 0 ;i < end-start ; i++){next = cur.getNext();cur.setNext(next.getNext());next.setNext(pre.getNext());pre.setNext(next);}return dummyNode.getNext();
}

穿针引线法

通过把指定区间提取出来,然后进行反转,最后再接回原链表的方法。

在这里插入图片描述

上代码:

/*** 穿针引线* @param head* @param start* @param end* @return*/public static LinkedNode ReverseSpecificInterval2(LinkedNode head,int start , int end){// 因为头节点可能发生变化,使用虚拟头节点可以便面复杂的分类讨论LinkedNode dummyNode = new LinkedNode(-1);dummyNode.setNext(head);LinkedNode pre = dummyNode;// 第一步,从虚拟头节点走start-1步,来到start节点的前一个结点。for ( int i = 0 ; i < start -1 ; i++){pre = pre.getNext();}// 第二步,从pre 再走end-start+1步来到end节点LinkedNode endNode = pre;for(int i = 0 ; i  < end-start+1 ; i++){endNode = endNode.getNext();}// 第三步切出一个子链LinkedNode startNode = pre.getNext();LinkedNode succ = endNode.getNext();endNode.setNext(null);// 第四步反转链表reverseLinkedList(startNode);// 第五步,接回原来的链表pre.setNext(endNode);startNode.setNext(succ);return dummyNode.getNext();}private static void reverseLinkedList(LinkedNode startNode) {LinkedNode pre = null ;LinkedNode cur = startNode;while(cur != null){LinkedNode next = cur.getNext();cur.setNext(pre);pre = cur;cur = next;}}

近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

在这里插入图片描述

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?

http://www.lryc.cn/news/199488.html

相关文章:

  • 掌控安全Update.jsp SQL注入
  • C#将图片转换为ICON格式(程序运行图标)
  • ELK架构Logstash的相关插件:grok、multiline、mutate、date的详细介绍
  • linux 防火墙介绍以及iptables的使用
  • 原码、反码、补码在汇编中的应用
  • 【红日靶场】vulnstack5-完整渗透过程
  • 嵌入式平台的电源总结
  • @Binds methods must be abstract 报错指南
  • 自定义反序列化类将LocalDate时间格式转为 LocalDateTime
  • MySQL JSON_TABLE() 函数
  • 【MATLAB第80期】基于MATLAB的结构核岭回归SKRR多输入单输出回归预测及分类预测模型
  • Qt消息对话框的使用
  • spring的Ioc、DI以及Bean的理解
  • 倒计时 天时分秒
  • Spring篇---第六篇
  • 【unity小技巧】适用于任何 2d 游戏的钥匙门系统和buff系统——UnityEvent的使用
  • 爬虫ip如何加入到代码里实现自动化数据抓取
  • 在win10上安装配置Hadoop的环境变量
  • MAX插件CG Magic怎么云渲染?操作方法已整起!
  • 尝试使用jmeter-maven-plugin
  • navigator.userAgent.toLowerCase区分设备,浏览器
  • 防火墙操作:开放端口ICMP时间戳请求漏洞修复
  • MySQL配置环境变量和启动登录
  • 救济金发放(The Dole Queue, UVa 133)rust解法
  • oracle实验四
  • 数据结构-堆排序Java实现
  • C#进阶——反射(Reflection)
  • Oracle 运维篇+应用容器数据库的install、upgrade、patch、uninstall
  • Affinity Publisher for Mac/Windows最新中文下载 排版神器
  • Mac文件对比同步工具 Beyond Compare 4.4.7