【LeetCode】链表 + 快慢指针找中间 + 反转链表 | 2130. 链表最大孪生和

题目

https://leetcode.cn/problems/maximum-twin-sum-of-a-linked-list/description/

思路

  1. 反转整个链表,得到一个新的反转链表
  2. 在原始链表上用快慢指针找到中间节点 slow
  3. 然后让原始链表的前半部分与反转链表的对应部分相加

code

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public int pairSum(ListNode head) {
        //反转链表
        ListNode dummy=new ListNode(0,null);//反转链表的dummy节点
        ListNode cur=head;
        ListNode oldNode=null;
        while(cur!=null){
            ListNode newNode=new ListNode(cur.val,oldNode);
            oldNode= newNode;
            dummy.next = newNode;
            cur=cur.next;
        }
        
        //找中间
        ListNode fast=head;
        ListNode slow=head;
        while(fast!=null && fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
        }

				//比大小
        int max=0;
        ListNode cur1=head;
        ListNode cur2=dummy.next;
        while(cur1!=slow){
            int tmp=cur1.val+cur2.val;
            if(tmp>max) max=tmp;
            cur1=cur1.next;
            cur2 =cur2.next;
        }
        return max;

    }
}
相关推荐
Zzz 小生6 分钟前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
l12586542 分钟前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain
青少儿编程课堂1 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
evans在进步1 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
M78佐菲1 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
小手cool2 小时前
使用递归对数组进行反转操作
java·数据结构·算法
兔兔兔兔12 小时前
记录C++ 13
开发语言·c++·算法
码行山野赴时序归途2 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法
土司大王2 小时前
LeetCode hot100——随机链表的复制
算法·leetcode·链表
叠层归一研究院2 小时前
螺旋时空:E框架的整合宇宙论
人工智能·经验分享·算法·机器学习·agi