推广网站公司电子商务智能建站

web/2025/9/27 5:30:52/文章来源:
推广网站公司,电子商务智能建站,英文互动网站建设,seo人工智能目录 一#xff1a;重排链表#xff08;LeetCode.143#xff09; 二#xff1a;删除链表的节点#xff08;LCR 136. 删除链表的节点#xff09; 三#xff1a;K个一组反转链表#xff08;LeetCode.25#xff09; 有关经典算法链表的第一篇内容#xff0c;可以查看我…目录 一重排链表LeetCode.143 二删除链表的节点LCR 136. 删除链表的节点 三K个一组反转链表LeetCode.25 有关经典算法链表的第一篇内容可以查看我的上一篇内容经典算法之链表篇一 一重排链表LeetCode.143 问题描述 给定一个单链表 L 的头节点 head 单链表 L 表示为 L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为 L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值而是需要实际的进行节点交换。 示例 输入: head  [1,2,3,4] 输出: [1,4,2,3]  示例2 输入: head  [1,2,3,4,5] 输出: [1,5,2,4,3]  解题思路 找到链表中点使用快慢指针找到链表的中点。快指针每次移动两步慢指针每次移动一步当快指针到达链表末尾时慢指针指向链表中点。 反转后半部分链表从中点处将链表分为两部分将后半部分链表进行反转。 合并链表将前半部分链表和反转后的后半部分链表依次交替合并即可得到重新排列后的链表。 处理边界情况需要注意链表为空或只有一个节点的情况直接返回即可 图示 第一步 第二步 第三步 第四步 代码实现 class ListNode {int val;ListNode next;ListNode(int x) { val  x; } }class Solution {public void reorderList(ListNode head) {if (head  null || head.next  null) return;// 找到链表的中间节点ListNode slow  head;ListNode fast  head;while (fast.next ! null  fast.next.next ! null) {slow  slow.next;fast  fast.next.next;}// 反转后半部分链表ListNode pre  null;ListNode cur  slow.next;slow.next  null; // 断开前后两部分链表while (cur ! null) {ListNode next  cur.next;cur.next  pre;pre  cur;cur  next;}// 合并两部分链表ListNode p1  head;ListNode p2  pre;while (p2 ! null) {ListNode tmp1  p1.next;ListNode tmp2  p2.next;p1.next  p2;p2.next  tmp1;p1  tmp1;p2  tmp2;}} }public class Main {public static void main(String[] args) {int[] nums  {1, 2, 3, 4, 5};ListNode head  createList(nums);// 重排链表Solution solution  new Solution();solution.reorderList(head);// 输出重排后的链表printList(head);}// 创建链表public static ListNode createList(int[] nums) {if (nums.length  0) return null;ListNode head  new ListNode(nums[0]);ListNode cur  head;for (int i  1; i  nums.length; i) {cur.next  new ListNode(nums[i]);cur  cur.next;}return head;}// 输出链表public static void printList(ListNode head) {ListNode cur  head;while (cur ! null) {System.out.print(cur.val   );cur  cur.next;}System.out.println();} } 二删除链表的节点LCR 136. 删除链表的节点 问题描述 给定单向链表的头指针和一个要删除的节点的值定义一个函数删除该节点。 返回删除后的链表的头节点。 示例 输入: head  [4,5,1,9], val  5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点那么在调用了你的函数之后该链表应变为 4 - 1 - 9. 解题思路 判断链表是否为空若为空直接返回 nullptr。 创建一个虚拟头节点 dummy并将其指向头节点 head这样做是为了方便处理头节点的删除操作。 初始化两个指针 pre 和 cur分别指向虚拟头节点和头节点。 遍历链表查找要删除的节点 如果当前节点的值等于要删除的值 val则将前一个节点 pre 的 next 指针指向当前节点的下一个节点 cur-next即完成删除操作。 否则更新 pre 和 cur 指针继续遍历链表。 完成遍历后更新头节点 head 为虚拟头节点的下一个节点 dummy-next即删除可能存在的头节点。 释放虚拟头节点的内存避免内存泄漏。 返回更新后的头节点 head。 图示 第一步 第二步 第三步遍历链表查找要删除的节点 第四步 代码演示 class ListNode {int val;ListNode next;ListNode(int x) {val  x;} }class Solution {public ListNode deleteNode(ListNode head, int val) {if (head  null) return null; // 如果链表为空直接返回 null// 创建一个虚拟头节点方便处理头节点的删除ListNode dummy  new ListNode(0);dummy.next  head;ListNode pre  dummy; // 前一个节点指针ListNode cur  head; // 当前节点指针while (cur ! null) {if (cur.val  val) { // 如果当前节点的值等于要删除的值pre.next  cur.next; // 将前一个节点的指针指向当前节点的下一个节点break; // 找到并删除节点后退出循环}pre  cur; // 更新前一个节点指针cur  cur.next; // 更新当前节点指针}head  dummy.next; // 更新头节点return head; // 返回头节点} }public class Main {// 创建链表public static ListNode createList(int[] nums) {if (nums.length  0) return null;ListNode head  new ListNode(nums[0]);ListNode cur  head;for (int i  1; i  nums.length; i) {cur.next  new ListNode(nums[i]);cur  cur.next;}return head;}// 输出链表public static void printList(ListNode head) {ListNode cur  head;while (cur ! null) {System.out.print(cur.val   );cur  cur.next;}System.out.println();}public static void main(String[] args) {// 输入链表int[] nums  {4, 5, 1, 9};ListNode head  createList(nums);int val  5;// 删除指定值的节点Solution solution  new Solution();head  solution.deleteNode(head, val);// 输出删除后的链表printList(head);} } 三K个一组反转链表LeetCode.25 问题描述 给你链表的头节点 head 每 k 个节点一组进行翻转请你返回修改后的链表。 k 是一个正整数它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值而是需要实际进行节点交换。 示例   输入head  [1,2,3,4,5], k 2 输出[2,1,4,3,5] 示例二 输入head  [1,2,3,4,5], k 3 输出[3,2,1,4,5] 解题思路 创建一个虚拟头节点 dummy将其 next 指向原链表的头节点 head方便处理头部的特殊情况。 使用 pre 指针来记录每个需要翻转的子链表的前一个节点。初始时pre 指向虚拟头节点。 在循环中先找到需要翻转的子链表的起始节点 start 和结束节点 end。如果剩余节点不足 k 个则结束循环。 将当前子链表与下一个子链表断开即将 end-next 置为 nullptr。 调用 reverse 函数翻转当前子链表并将翻转后的子链表连接到前一个子链表的末尾即将 pre-next 指向翻转后的子链表的头节点。 将翻转后的子链表的末尾与下一个子链表的开头连接即将 start-next 指向下一个需要翻转的子链表的第一个节点。 更新 pre 指向下一个需要翻转的子链表的前一个节点。 循环直到所有子链表都被翻转。 图示 第一步 第二步 第三步 第四步 第五步 第六步 第七步 代码演示 class ListNode {int val;ListNode next;ListNode(int x) { val  x; } }class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy  new ListNode(0); // 创建一个虚拟头节点方便处理头部的特殊情况dummy.next  head;ListNode prev  dummy; // prev 指向每个需要翻转的子链表的前一个节点while (true) {ListNode start  prev.next; // start 指向当前需要翻转的子链表的第一个节点ListNode end  prev; // end 指向当前需要翻转的子链表的最后一个节点for (int i  0; i  k  end ! null; i) {end  end.next; // 找到当前需要翻转的子链表的最后一个节点}if (end  null) {break; // 如果剩余节点不足 k 个结束循环}ListNode nextGroup  end.next; // nextGroup 指向下一个需要翻转的子链表的第一个节点end.next  null; // 将当前子链表与下一个子链表断开prev.next  reverse(start); // 翻转当前子链表并将翻转后的子链表连接到前一个子链表的末尾start.next  nextGroup; // 将翻转后的子链表的末尾与下一个子链表的开头连接prev  start; // 更新 prev 指向下一个需要翻转的子链表的前一个节点}return dummy.next; // 返回虚拟头节点的下一个节点作为翻转后的链表的头节点}private ListNode reverse(ListNode head) {ListNode prev  null;ListNode curr  head;while (curr ! null) {ListNode next  curr.next;curr.next  prev;prev  curr;curr  next;}return prev;} }public class Main {public static void main(String[] args) {ListNode head  new ListNode(1);head.next  new ListNode(2);head.next.next  new ListNode(3);head.next.next.next  new ListNode(4);head.next.next.next.next  new ListNode(5);Solution solution  new Solution();ListNode newHead  solution.reverseKGroup(head, 2);printList(newHead); // 输出2 1 4 3 5}private static void printList(ListNode head) {ListNode curr  head;while (curr ! null) {System.out.print(curr.val   );curr  curr.next;}System.out.println();} } 总结 这三道链表题相比较于上篇的三道题难度有些增加因此要多加注重理解。作者在写算法题的时候也借鉴了许多技术大佬的相关博客知识和力扣官方的解题思路后续还会再写有关链表的经典算法题大家可以持续关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

培训网站 建科技网站建设公司

前言 让静态的图片“开口说话”,一直是人们对人工智能的期待。近年来,随着深度学习技术的发展,音频驱动的肖像图像动画技术取得了长足的进步。各种模型涌现,但如何实现精准的唇形同步、保持视频的真实感和流畅性,以及…

手机优化游戏性能的软件网站优化推广公司推荐

文章目录 下载安装包执行安装包 #微信开发者工具安装教程 下载安装包 官网网址 执行安装包 D:\Program Files (x86)\Tencent\微信web开发者工具\dll

局域网站建设模版网站优化北京seo

后端业务:定时更新“A股日线行情”数据 需求说明 为了获取前一天的最新数据,我们需要每天晚上10点定时刷新daily股票列表基础信息,并将最新数据插入或更新到数据库中。 如果该内容是在当天交易日信息未更新前查询(15~16点之前&a…

简易网站只做网站不做app

本章主要是讲模拟实现list,文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码,链表是由一块一块不连续的空间组成的,所以这里写了三个模板,一个是节点,一…

免费视频网站app使用排名东莞网站建设 硅橡胶

最近在写定时任务,以前没接触过。查了些相关资料说使用quartz定时框架。需要配置文件:config-quartz.xml相关配置如下(红色部分是之后添加的,在后面步骤会说明):xsi:schemaLocation"http://www.springframework.org/schema/b…

网络服务提供者是谁张家口seo

2019独角兽企业重金招聘Python工程师标准>>> 所谓粒子系统可以想象为一堆粒子由一个点或一个面按照一定的规律进行喷射。 粒子系统大致分为2类:一类为“点喷式”,一类为“面喷式”。可以想象前者由一个点进行喷射,类似于焰火&…

邵阳住建部网站阳原网站建设

文章目录 1.流复制介绍2.异步流复制2.1.主库部署2.2.备库部署2.3.测试 3.同步复制3.1.主库部署3.2.备库部署3.3.测试 4.主备切换 开源中间件 # PostgreSQLhttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/postgresql/postgres-stream/1.流复制…

北京微网站建设设计服务办公室装修专业网站

概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…

国外销售网站怎么进入邯郸论坛网

打印机是我们在办公过程中经常会用到的打印设备,特别是当需要大量的文件资料时,打印机可以帮助我们快速的打印和记录。随着打印机使用的不断广泛,打印机的种类也在不断的增多,为了能够适应现在这个网络智能时代的发展,…

网站建设选哪家公司好宁皓 wordpress

编程  我们日常生活中接触到的电子类产品中的应用都是由编程而来  为什么编程,偷懒  我们通过编程驱使(指挥,命令)的是电信号  为什么上面说编程是偷懒,电的发现,给人们带来了便利,人们…

站长seo网站开发的人李海涛

C开发WPF,开发环境配置 操作系统:Windows XP SP2, Windwos Vista开发工具:Visual Studio 2005,Expression BlendSDK:.NET Framework 3.0或以上不需要其它的了,比C#开发WPF少了一些。但是需要自己手工打造一些代码,也有不少乐趣在里…

沈阳网站建设德泰诺做专业课视频课的网站

SpringCloudAlibaba–Sentinel Sentinel被称为分布式系统的流量防卫兵,是阿里开源流量框架,从服务限流、降级、熔断等多个纬度保护服务。Sentinel同时提供了简洁易用的控制台,可以看到接入应用的秒级数据,并可以在控制台设置一些…

学院网站建设的意义彩票网站开发制作软件

现如今企业的主流生产模式就是流水线生产,一道工序结束后,紧接着开展下一项工序,这种作业模式可以以一种比较高效的方式缩减生产时间。尽管流水作业的效率已经够高的了,但是各个工序之间如果衔接不到位的话,会造成生产…

网站公司苏州怎么用we做网站

展开全部1首先,你需要个安装包,自个去下0如何在官网下载MySQL 数据库2第一步中,选择32313133353236313431303231363533e58685e5aeb931333365666165I accept license term,然后Next3默认选第一项Developer Default ,然后Next4这一步中&#xf…

查网站怎么做的哈尔滨网站建设公司哪家好

首先对于m1的情况非常容易处理(其实这儿因为边界我错了好久。。。),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]max(f[j][k-1]sum[j1][i]),那么对于m2的时候类似与m1的时候&#…

天河做网站要多少钱建立网站预算

简介:记一次TCP全队列溢出问题排查过程1. 前言本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家。2. 问题描述A服务调用B服务接口超时,B服务…

中煤第五建设有限公司seo诊断书

最近想搞一下rt5350,所以找了个原厂的SDK包进行了编译,很快路由器就可以用了,把我的编译操作步骤写了下分享给更多的爱好者,供大家参靠,下一步准备移植摄像头玩玩。有兴趣的可以一起交流。 RT5350移植Toolchain工具的安…

常熟制作网站的地方阿贝云服务器

在数字媒体领域,短视频的崛起已不可忽视。对于商业实体而言,掌握如何通过短视频平台有效吸引潜在客户并提高转化率,已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制,以期为企业提供一套系统化的策略&#xf…

wordpress 一小时建站教程网页游戏吧

文章目录 代码准备创建jenkins 任务测试推送使用项目里面的jenkinsfile 进行升级操作 文字版本流程项目构建 代码准备 推送代码到gitlab 代码去叩叮狼教育找 k8s 创建jenkins 任务 创建一个k8s-cicd-demo 流水线任务 将jenkins 里面构建时候的地址还有token, 给到…

网站订单模板网站国际化

目录 CMakeLists.txt文件中: 初始化以及实际运用代码: 在partitions.csv 内存分配文件中,添加voice_data项