【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;

    }
}
相关推荐
垆边人似月.2 分钟前
华为机试题 :最长递增子序列题目
数据结构·c++·算法·华为
动词ing16 分钟前
【题目练习】算法 组合总和
算法
程序员-Benothing22 分钟前
Linux文本排序统计命令:sort、uniq、wc、cut、tr实战
java·开发语言·算法
开发者联盟league25 分钟前
c++11 使用chrono库转换时间点和字符串,计算时间点间隔
java·c++·算法
老歌老听老掉牙1 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移
W.A委员会1 小时前
PID与PID整定
python·算法
冷雨夜中漫步1 小时前
YOLO快速入门——(2)YOLO V26安装与快速入门
图像处理·算法·yolo·计算机视觉
longlongzihan1 小时前
LeetCode 41. 缺失的第一个正数:从基础解法到原地哈希
c++·算法·leetcode
Omics Pro2 小时前
强生:以机理为中心!虚拟细胞世界模型
数据库·人工智能·python·深度学习·算法·机器学习·自然语言处理
FPGA信号处理2 小时前
【凸优化】第一节课(下):保凸运算、分离超平面与 Farkas 引理
人工智能·算法·机器学习