LeetCode281周赛: 6013. 合并零之间的节点

137 阅读1分钟

原题地址: leetcode-cn.com/problems/me…

image.png

/**
 * 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时, 将和放到左指针指向位置并改变左指针指向为右指针位置, 然后继续遍历, 重复操作至右指针指向最后一个节点.