LeetCode 2130.链表最大孪生和
题目:
在一个大小为 n
且 n
为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1
的 i
,第 i
个节点(下标从 0 开始)的孪生节点为第 (n-1-i)
个节点 。
- 比方说,
n = 4
那么节点0
是节点3
的孪生节点,节点1
是节点2
的孪生节点。这是长度为n = 4
的链表中所有的孪生节点。
孪生和 定义为一个节点和它孪生节点两者值之和。
给你一个长度为偶数的链表的头节点 head
,请你返回链表的 最大孪生和 。
思路:找中点,反转,滑动
代码:
class Solution {
public int pairSum(ListNode head) {
int ans = 0;
int sum = 0;
ListNode mid = middleNode(head);
ListNode head2 = reverseList(mid);
while (head2 != null) {
sum = head.val + head2.val;
ans = Math.max(ans, sum);
head = head.next;
head2 = head2.next;
}
return ans;
}
private ListNode middleNode(ListNode head) {
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
private ListNode reverseList(ListNode head) {
ListNode pre = null, cur = head;
while (cur != null) {
ListNode nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
}
性能:
时间复杂度o(n)
空间复杂度o(1)
原文地址:https://blog.csdn.net/qq_57349657/article/details/143660245
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!