-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmax-twinSum-of-linked-list.js
65 lines (46 loc) · 1.39 KB
/
max-twinSum-of-linked-list.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
In a linked list of size n, where n is even, the ith node (0-indexed) of the linked list is known as the twin of the (n-1-i)th node, if 0 <= i <= (n / 2) - 1.
For example, if n = 4, then node 0 is the twin of node 3, and node 1 is the twin of node 2. These are the only nodes with twins for n = 4.
The twin sum is defined as the sum of a node and its twin.
Given the head of a linked list with even length, return the maximum twin sum of the linked list.
Example 1:
Input: head = [5,4,2,1]
Output: 6
Explanation:
Nodes 0 and 1 are the twins of nodes 3 and 2, respectively. All have twin sum = 6.
There are no other nodes with twins in the linked list.
Thus, the maximum twin sum of the linked list is 6.
*/
const reverseLList = (list) => {
let pre = null;
let post;
let curr = list;
while(curr) {
post = curr.next;
curr.next = pre;
pre = curr;
curr = post;
}
return pre;
};
var pairSum = function(head) {
let maxSum = 0;
let p1 = head;
let p2 = head;
while(p2.next.next) {
p1 = p1.next;
p2 = p2.next.next;
}
p1 = reverseLList(p1);
while(p1 && head) {
maxSum = Math.max(p1.val + head.val, maxSum);
p1 = p1.next;
head = head.next;
}
return maxSum;
};
/*
Created two pointers to divide the list in half
Reversed the second half of linked list
Then checked MaxSum
*/