news 2026/8/24 17:42:20

力扣-链表最大孪生和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-链表最大孪生和

思路分析

  1. 找链表中点:用快慢指针(慢指针走 1 步,快指针走 2 步)找到链表的中间节点;
  2. 反转后半段链表:将中点后的后半段链表反转;
  3. 计算孪生和:用两个指针分别从链表头部和反转后的后半段头部出发,依次计算每对孪生节点的和,记录最大值。

代码实现

/** * 方法一:快慢指针找到中间节点,反转后半部分链表,遍历两部分节点计算最大和 * @param head * @return */publicintpairSum(ListNodehead){// 快慢指针找到中间节点ListNodeslow=head;ListNodefast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}// 反转后半部分链表ListNodereverseHead=reverseListNode(slow);// 遍历两部分节点计算最大和intmaxSum=0;while(reverseHead!=null){intfirstNum=head.val;intsecondNum=reverseHead.val;maxSum=Math.max(maxSum,firstNum+secondNum);head=head.next;reverseHead=reverseHead.next;}returnmaxSum;}/** * @Author Feng * @Description * @Date 2026/1/14 * @Param [slow] * @return main.leetcode75.arr_str.entity.ListNode **/privateListNodereverseListNode(ListNodehead){// 定义前一个节点为null,当前节点为头节点ListNodeprev=null;ListNodecurr=head;while(curr!=null){ListNodetemp=curr.next;curr.next=prev;prev=curr;curr=temp;}returnprev;}

复杂度分析

  • 空间复杂度 O (1):无需额外存储所有节点值,仅用指针操作;
  • 时间复杂度 O (n):找中点 O (n/2) + 反转后半段 O (n/2) + 计算和 O (n/2),总复杂度 O (n)。

思路分析二

  1. 使用快慢指针找中点:

    • 使用快慢指针技术找到链表的中间节点
    • 慢指针每次移动一步,快指针每次移动两步
    • 当快指针到达末尾时,慢指针正好在链表的中点位置
  2. 利用栈存储前半部分节点值:

    • 创建一个双端队列(用作栈)
    • 从头节点开始遍历到中点之前的所有节点
    • 将这些节点的值依次压入栈中
    • 由于栈是后进先出的数据结构,这样栈顶元素对应的是链表后半部分对称位置的节点
  3. 配对求最大和:

    • 从中点开始遍历后半部分链表
    • 每次从栈中弹出一个值(这对应前半部分对称位置的节点值)
    • 将栈中弹出的值与当前后半部分节点的值相加
    • 更新最大和

代码实现二

publicintpairSum2(ListNodehead){// 快慢指针找到中间节点ListNodeslow=head;ListNodefast=head;while(fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}// 遍历前半部分节点,将节点值加入栈中Deque<Integer>stack=newArrayDeque<>();while(head!=slow){stack.push(head.val);head=head.next;}// 遍历后半部分节点,弹出栈顶元素与当前节点值计算最大和intmaxSum=0;while(slow!=null){intfirstNum=stack.pop();intsecondNum=slow.val;maxSum=Math.max(maxSum,firstNum+secondNum);slow=slow.next;}returnmaxSum;}

复杂度分析

  • 时间复杂度:O(n),只需要遍历链表两次
  • 空间复杂度:O(n/2),只需要额外的空间存储前半部分节点的值
    优势:不需要修改原链表结构
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 17:54:37

5分钟部署bert-base-chinese:中文NLP预训练模型一键体验

5分钟部署bert-base-chinese&#xff1a;中文NLP预训练模型一键体验 1. 背景与价值 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;自2018年由Google提出以来&#xff0c;…

作者头像 李华
网站建设 2026/8/22 19:41:22

MusicFree插件系统深度解析:从架构原理到故障排除的终极指南

MusicFree插件系统深度解析&#xff1a;从架构原理到故障排除的终极指南 【免费下载链接】MusicFree 插件化、定制化、无广告的免费音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/mu/MusicFree MusicFree作为一款高度插件化的音乐播放器&#xff0c;其核心…

作者头像 李华
网站建设 2026/8/21 17:54:41

JavaScript代码还原完整教程:从混淆到清晰的终极指南

JavaScript代码还原完整教程&#xff1a;从混淆到清晰的终极指南 【免费下载链接】obfuscator-io-deobfuscator A deobfuscator for scripts obfuscated by Obfuscator.io 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscator-io-deobfuscator 面对被层层加密的Jav…

作者头像 李华
网站建设 2026/8/21 17:54:40

HandheldCompanion终极指南:完美解决Windows掌机控制器兼容性问题

HandheldCompanion终极指南&#xff1a;完美解决Windows掌机控制器兼容性问题 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 还在为Windows掌机游戏无法识别控制器而困扰吗&#xff1f;Handhel…

作者头像 李华
网站建设 2026/8/21 17:54:40

HY-MT1.5-1.8B边缘计算部署性能测试

HY-MT1.5-1.8B边缘计算部署性能测试 1. 引言 随着多语言交流需求的快速增长&#xff0c;高质量、低延迟的翻译服务已成为智能设备、跨境通信和本地化应用的核心能力。在这一背景下&#xff0c;边缘侧部署轻量级高性能翻译模型成为实现隐私保护、降低响应延迟和减少云端依赖的…

作者头像 李华
网站建设 2026/8/21 17:54:43

JFlash烧录程序底层驱动适配:深度剖析设备初始化流程

JFlash烧录程序底层驱动适配&#xff1a;从“连不上”到“秒下载”的实战解析当你的JFlash显示“Cannot connect to target”&#xff0c;你该看哪一行代码&#xff1f;这是每个嵌入式工程师都经历过的一幕&#xff1a;新板子焊好&#xff0c;信心满满打开JFlash&#xff0c;点…

作者头像 李华