力扣刷题——2181.合并零之间的节点
给你一个链表的头节点 head
,该链表包含由 0
分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0
。
对于每两个相邻的 0
,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0
移除,修改后的链表不应该含有任何 0
。
返回修改后链表的头节点 head
。
示例 1:
输入:head = [0,3,1,0,4,5,2,0] 输出:[4,11]
我们要知道,我们输出的答案当系统读到下一个节点为空时,会认为读到了最后一个节点。所以我们可以使用类似双指针的解法,一个节点一直向后遍历链表,当第一个节点遍历到节点值为0或者链表末尾时,使用一个节点来存储另一个节点遍历过的节点的值的和,然后第一个节点向后走。循环结束后,将第一个节点当前位置的next置为空代表链表结束。
class Solution {
public:
ListNode* mergeNodes(ListNode* head) {
auto tail=head;
for(auto cur=head->next;cur->next;cur=cur->next)
{
if(cur->val)
{
tail->val+=cur->val;
}
else
{
tail=tail->next;
tail->val=0;
}
}
tail->next=nullptr;
return head;
}
};