2181. Merge Nodes in Between Zeros

# 2181. Merge Nodes in Between Zeros#

## 题目 #

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 * 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`.

## 解题思路 #

• 简单题。合并链表中两个值为 0 的节点。从头开始遍历链表，遇到节点值不为 0 的节点便累加；遇到节点值为 0 的节点，将累加值转换成结果链表要输出的节点值，然后继续遍历。

## 代码 #

``````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{}
}
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
}
`````` Sep 11, 2022 Edit this page