news 2026/9/3 0:05:48

力扣-链表最大孪生和

作者头像

张小明

前端开发工程师

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/9/2 8:56:55

岛屿设计革命:从零开始打造你的梦想乐园

岛屿设计革命&#xff1a;从零开始打造你的梦想乐园 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal Crossing)启发而创建的&…

作者头像 李华
网站建设 2026/9/2 11:15:43

Runtime Audio Importer:重塑虚幻引擎音频处理新范式

Runtime Audio Importer&#xff1a;重塑虚幻引擎音频处理新范式 【免费下载链接】RuntimeAudioImporter Runtime Audio Importer plugin for Unreal Engine. Importing audio of various formats at runtime. 项目地址: https://gitcode.com/gh_mirrors/ru/RuntimeAudioImpo…

作者头像 李华
网站建设 2026/9/2 5:51:22

从Excel到Web表格:Luckyexcel技术实现深度解析

从Excel到Web表格&#xff1a;Luckyexcel技术实现深度解析 【免费下载链接】Luckyexcel 项目地址: https://gitcode.com/gh_mirrors/lu/Luckyexcel 在当今数据驱动的业务环境中&#xff0c;Excel文件与Web表格之间的无缝转换已成为前端开发的核心需求。Luckyexcel作为一…

作者头像 李华
网站建设 2026/9/3 1:17:32

如何快速掌握League Toolkit:面向英雄联盟玩家的完整自动化工具指南

如何快速掌握League Toolkit&#xff1a;面向英雄联盟玩家的完整自动化工具指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit L…

作者头像 李华
网站建设 2026/9/3 2:10:54

YOLOv8如何提升召回率?工业场景参数调优教程

YOLOv8如何提升召回率&#xff1f;工业场景参数调优教程 1. 引言&#xff1a;工业级目标检测的挑战与YOLOv8的优势 在智能制造、安防监控、物流分拣等工业应用场景中&#xff0c;目标检测系统不仅需要高精度识别&#xff0c;更要求高召回率&#xff08;Recall&#xff09;以确…

作者头像 李华
网站建设 2026/9/3 0:25:13

通义千问3-14B部署实操:RTX4090 24GB跑满全参数指南

通义千问3-14B部署实操&#xff1a;RTX4090 24GB跑满全参数指南 1. 引言&#xff1a;为何选择Qwen3-14B进行本地部署&#xff1f; 随着大模型在推理能力、多语言支持和长上下文处理方面的持续演进&#xff0c;如何在消费级硬件上实现高性能、低成本的本地化部署成为开发者关注…

作者头像 李华