You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

O(1)空间复杂度下求单链表首尾逐次配对求和的最大值

优化算法实现方案

你之前的思路每次遍历都要找当前尾节点,总时间复杂度为O(n²),确实存在较大优化空间,以下是时间复杂度O(n)、空间复杂度仍为O(1)的实现方案,完全符合题目要求:

核心思路

本质上我们要计算的配对是:原链表第1个和最后1个、第2个和倒数第2个……第k个和倒数第k个的和的最大值。我们不需要动态删除首尾节点,只需要通过「找中点+反转后半段」的操作,把反向遍历后半段的需求变成正向遍历,就能用双指针一次遍历完成计算。

具体实现步骤

  • 第一步:快慢指针定位链表中点
    初始化快、慢指针都指向链表头节点,快指针每次移动2步,慢指针每次移动1步,直到快指针的后继节点为空(链表总长度为偶数,此时快指针刚好停在最后一个节点,慢指针停在前半段的最后一个节点),此时后半段的头节点为慢指针的后继节点。
  • 第二步:原地反转后半段链表
    仅通过修改节点指针的方式反转后半段链表,不需要额外存储空间,反转完成后后半段的头节点就是原链表的尾节点。
  • 第三步:双指针遍历计算最大和
    左指针从原链表头节点出发,右指针从反转后的后半段头节点出发,两个指针每次同步移动1步,每次计算当前两个指针指向节点的数值和,更新全局最大值,直到右指针遍历到空节点为止(前后半段长度相等,刚好完成所有配对计算)。

复杂度说明

  • 时间复杂度:找中点、反转后半段、双指针遍历三个步骤都是O(n)的时间开销,总时间复杂度为O(n),远优于原来的O(n²)方案
  • 空间复杂度:全程仅使用常数个额外指针,空间复杂度为O(1),符合题目要求

举个简单验证例子:原链表为2->3->5->1->4->6,中点在5的位置,后半段1->4->6反转后为6->4->1,配对和分别为2+6=8、3+4=7、5+1=6,最大值为8,和动态删除首尾节点的计算结果完全一致。

内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:05