LeetCode Algorithm 2130. 链表最大孪生和
Posted wx5e46005fc4d21
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 2130. 链表最大孪生和相关的知识,希望对你有一定的参考价值。
题目链接:2130. 链表最大孪生和
Ideas
算法:双指针、回文判断
数据结构:链表
思路:这道题让我想起来之前做的判断回文链表的题目,然后我就想到了一个类似的解法,先用双指针把链表的后半段翻转过来,然后还是双指针分别从头尾往中间走,同时另外定义一个变量记录最大的孪生和。
Code
C++
class Solution
public:
int pairSum(ListNode* head)
// 1.快慢指针找到链表中间位置
ListNode *quick = head, *slow = head;
while (quick->next->next != nullptr)
slow = slow->next;
quick = quick->next->next;
// 2.从链表中间位置开始将后续节点翻转
ListNode *cur = slow->next;
slow->next = nullptr;
while (cur != nullptr)
ListNode *nxt = cur->next;
cur->next = slow;
slow = cur;
cur = nxt;
// 3.双指针分别从头尾开始遍历,并统计最大孪生和
int ans = 0;
quick = head;
ListNode *tail = slow;
while (quick != nullptr && slow != nullptr)
ans = max(ans, quick->val + slow->val);
quick = quick->next;
slow = slow->next;
// 4.将翻转的节点再翻转回去
cur = tail->next;
tail->next = nullptr;
while (cur != nullptr)
ListNode *nxt = cur->next;
cur->next = tail;
tail = cur;
cur = nxt;
return ans;
;
以上是关于LeetCode Algorithm 2130. 链表最大孪生和的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Algorithm 2130. 链表最大孪生和