原题地址: leetcode-cn.com/problems/me…
/**
* Definition for singly-linked list.
* 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 temp = head, last = head.next;
// 原地修改, 双指针
int val = 0;
while (last != null) {
if (last.val == 0) {
// 移动到下一个0处时, 给temp赋值并指向下一个0
temp.val = val;
val = 0;
if (last.next == null) {
temp.next = null;
} else {
temp.next = last;
temp = temp.next;
}
}
val += last.val;
last = last.next;
}
return head;
}
}
思路: 双指针, 左边指向0所在节点, 右边遍历, 当右指针指向0时, 将和放到左指针指向位置并改变左指针指向为右指针位置, 然后继续遍历, 重复操作至右指针指向最后一个节点.