题目
在一个大小为 n
且 n
为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1
的 i
,第 i
个节点(下标从 0 开始)的孪生节点为第 (n-1-i)
个节点 。
- 比方说,
n = 4
那么节点 0 是节点 3 的孪生节点,节点 1 是节点 2 的孪生节点。这是长度为 n = 4 的链表中所有的孪生节点。
孪生和定义为一个节点和它孪生节点两者值之和。
给你一个长度为偶数的链表的头节点 head
,请你返回链表的最大孪生和 。
题解
注意到,孪生节点就是已知链表的首尾一一对应,可以遍历一次给定链表,并运用双端队列deque存储;
依次取出首尾元素求和,弹出后重复该步骤,找出最大和即可。
代码
class Solution {
public:
int pairSum(ListNode* head) {
deque<int> tmp;
while(head!=nullptr){
tmp.push_back(head->val);
head=head->next;
}
int res=0;
while(!tmp.empty()){
int f=tmp.front();
tmp.pop_front();
int b=tmp.back();
tmp.pop_back();
res=max(res,f+b);
}
return res;
}
};