2181. Merge Nodes in Between Zeros

2181. Merge Nodes in Between Zeros #

题目 #

给定链表头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端末尾 的节点都满足 Node.val == 0

对于每两个相邻的 0 ,之间的所有节点合并为一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0

返回修改后链表的头节点 head

思路 #

代码 #

public class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Solution {
    public ListNode mergeNodes(ListNode head) {
        ListNode sentinel = new ListNode(-1, head);
        ListNode ptr = sentinel;
        while (ptr != null) {
            if (ptr.next.val == 0) {
                ptr.next = ptr.next.next;
                ptr = ptr.next;
            } else {
                ptr.val += ptr.next.val;
                ptr.next = ptr.next.next;
            }
        }
        return sentinel.next;
    }
}