2181. Merge Nodes in Between Zeros
Medium
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.
Constraints:
- The number of nodes in the list is in the range
[3, 2 * 105]
. 0 <= Node.val <= 1000
- There are no two consecutive nodes with
Node.val == 0
. - The beginning and end of the linked list have
Node.val == 0
.
Solution:
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val = 0, $next = null) {
* $this->val = $val;
* $this->next = $next;
* }
* }
*/
class Solution {
/**
* @param ListNode $head
* @return ListNode
*/
function mergeNodes($head) {
$dummy = new ListNode(0);
$current = $dummy;
$sum = 0;
// Skip the first zero node
$head = $head->next;
while ($head !== null) {
if ($head->val == 0) {
$current->next = new ListNode($sum);
$current = $current->next;
$sum = 0;
} else {
$sum += $head->val;
}
$head = $head->next;
}
return $dummy->next;
}
}
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me: