在一个大小为 n 且 n 为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的孪生节点为第 (n-1-i) 个节点 。
比方说,n = 4 那么节点 0 是节点 3 的孪生节点,节点 1 是节点 2 的孪生节点。这是长度为 n = 4 的链表中所有的孪生节点。
孪生和 定义为一个节点和它孪生节点两者值之和。给你一个长度为偶数的链表的头节点 head ,请你返回链表的 最大孪生和 。
public int pairSum(ListNode head) {
// 快慢指针找到中间位置,同时将前半部分翻转
ListNode pre = null;
ListNode slow = head;
ListNode fast = head;
while (fast != null) {
fast = fast.next.next;
ListNode node = slow;
slow = node.next;
node.next = pre;
pre = node;
}
// 计算最大孪生和
int ans = 0;
fast = slow;
slow = pre;
while (fast != null) {
ans = Math.max(ans, slow.val + fast.val);
slow = slow.next;
fast = fast.next;
}
return ans;
}