题目:
解题思路:
我们从链表头节点 head 的下一节点开始遍历,并使用变量 sum 累计当前遍历到的节点的元素之和。
如果当前节点的值为 0,那么我们就新建一个值为 newnode 的节点存放sum,放在答案链表dummy的尾部,并将 newnode初始化为NULL。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeNodes(struct ListNode* head){
struct ListNode* node = head;
struct ListNode dummy; //创建虚拟头结点
struct ListNode* current = &dummy;
do{
int sum = 0;
do{
sum += node->next->val;
node = node->next;
}while(node->next && node->next->val != 0);
struct ListNode* newnode = (struct ListNode*) malloc (sizeof(struct ListNode));
newnode->val = sum;
newnode->next = NULL; //初始化新节点为null
current->next = newnode;
current = newnode;
node = node->next;
}while(node && node->next);
return dummy.next; //返回新链表头结点
}