-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmerge-nodes-between-zero.js
64 lines (44 loc) · 1.53 KB
/
merge-nodes-between-zero.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
/*
You are given the head of a linked list, which contains a series of integers separated by 0's. The beginning and end of the linked list will have Node.val == 0.
For every two consecutive 0's, merge all the nodes lying in between them into a single node whose value is the sum of all the merged nodes. The modified list should not contain any 0's.
Return the head of the modified linked list.
Example 1:
Input: head = [0,3,1,0,4,5,2,0]
Output: [4,11]
Explanation:
The above figure represents the given linked list. The modified list contains
- The sum of the nodes marked in green: 3 + 1 = 4.
- The sum of the nodes marked in red: 4 + 5 + 2 = 11.
Example 2:
Input: head = [0,1,0,3,0,2,2,0]
Output: [1,3,4]
Explanation:
The above figure represents the given linked list. The modified list contains
- The sum of the nodes marked in green: 1 = 1.
- The sum of the nodes marked in red: 3 = 3.
- The sum of the nodes marked in yellow: 2 + 2 = 4.
*/
var mergeNodes = function(head) {
let p1 = head
let zeroCounter = 0
let sum = 0
let newList = new ListNode(-1)
let list = newList
while(p1){
sum += p1.val
if(p1.val === 0){
zeroCounter += 1
}
if(p1.val === 0 && zeroCounter === 2){
list.next = new ListNode(sum)
list = list.next
sum = 0
zeroCounter = 1
}
p1 = p1.next
}
return newList.next
};
/*
Instead of using two pointers I decided to use one pointer whick keeps track of how many times the 0 occurs
*/