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;
}
}