2181. Merge Nodes in Between Zeros

2181. Merge Nodes in Between Zeros #

Problem #

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:

https://assets.leetcode.com/uploads/2022/02/02/ex1-1.png

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:

https://assets.leetcode.com/uploads/2022/02/02/ex2-1.png

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 * 10^5].
  • 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.

Problem Summary #

You are given the head node head of a linked list, which contains a series of integers separated by 0. The beginning and end nodes of the linked list both satisfy Node.val == 0. For every two adjacent 0s, merge all nodes between them into a single node whose value is the sum of the values of all merged nodes. Then remove all 0s; the modified linked list should not contain any 0.

Return the head node head of the modified linked list.

Solution Approach #

  • Easy problem. Merge the nodes between two nodes in the linked list whose values are 0. Traverse the linked list from the head; when encountering a node whose value is not 0, accumulate it; when encountering a node whose value is 0, convert the accumulated value into the node value to be output in the result linked list, then continue traversing.

Code #

package leetcode

import (
	"github.com/halfrost/leetcode-go/structures"
)

// ListNode define
type ListNode = structures.ListNode

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeNodes(head *ListNode) *ListNode {
	res := &ListNode{}
	h := res
	if head.Next == nil {
		return &structures.ListNode{}
	}
	cur := head
	sum := 0
	for cur.Next != nil {
		if cur.Next.Val != 0 {
			sum += cur.Next.Val
		} else {
			h.Next = &ListNode{Val: sum, Next: nil}
			h = h.Next
			sum = 0
		}
		cur = cur.Next
	}
	return res.Next
}

Calendar Jun 25, 2026
Edit Edit this page
Total visits:   You are visitor No.
中文