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

    }
}
相关推荐
Charlie_lll3 小时前
力扣解题-67. 二进制求和
算法·leetcode·职场和发展
Yzzz-F3 小时前
GYM106247B[数论 构造一个数字和因子 使得等于n个因子之和=数字]
算法
CyberMuse3 小时前
欧拉公式(Euler‘s Formula)在信号系统中的应用
算法
吕司3 小时前
LeetCode Hot Code —— 和为K的子数组
数据结构·算法·leetcode
承渊政道3 小时前
【优选算法】(实战剖析链表核心操作技巧)
开发语言·数据结构·c++·vscode·学习·算法·链表
Boop_wu3 小时前
[Java算法] 递归(1)
java·算法·深度优先
stolentime3 小时前
树套树+标记永久化:[POI 2006] TET-Tetris 3D&&SPOJ1741 TETRIS3D - Tetris 3D题解
c++·算法·线段树·树套树·标记永久化
XiYang-DING3 小时前
【LeetCode】链表 + 快慢指针找倒数结点 | 链表中倒数第k个结点
算法·leetcode·链表
一轮弯弯的明月4 小时前
有序整数对个数-欧拉函数
java·算法·蓝桥杯·学习心得