• LeetCode每日一题(2181. Merge Nodes in Between Zeros)


    You are given the head of a linked list, which contains a series of integers separated by 0’s. The beginning and end of the linked list will have Node.val == 0.

    For every two consecutive 0’s, merge all the nodes lying in between them into a single node whose value is the sum of all the merged nodes. The modified list should not contain any 0’s.

    Return the head of the modified linked list.

    Example 1:

    Input: head = [0,3,1,0,4,5,2,0]
    Output: [4,11]

    Explanation:
    The above figure represents the given linked list. The modified list contains

    • The sum of the nodes marked in green: 3 + 1 = 4.
    • The sum of the nodes marked in red: 4 + 5 + 2 = 11.

    Example 2:

    Input: head = [0,1,0,3,0,2,2,0]
    Output: [1,3,4]

    Explanation:
    The above figure represents the given linked list. The modified list contains

    • The sum of the nodes marked in green: 1 = 1.
    • The sum of the nodes marked in red: 3 = 3.
    • The sum of the nodes marked in yellow: 2 + 2 = 4.

    Constraints:

    • The number of nodes in the list is in the range [3, 2 * 105].
    • 0 <= Node.val <= 1000
    • There are no two consecutive nodes with Node.val == 0.
    • The beginning and end of the linked list have Node.val == 0.

    这题应该会有很多种解法,遍历+递归或者单纯的遍历都可以解决问题, 或者单纯的递归应该也可以, 只是写法上可能要复杂一些。我选的第一种方式, 遍历+递归, 遇到 0 则进行递归调用得到后面的链表, 如果不是 0 则继续向后遍历累加当前 node 的 val


    
    impl Solution {
        pub fn merge_nodes(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
            let mut curr = 0;
            while let Some(mut node) = head {
                if node.val == 0 {
                    if curr == 0 {
                        head = node.next.take();
                        continue;
                    }
                    let mut n = ListNode::new(curr);
                    n.next = Solution::merge_nodes(node.next.take());
                    return Some(Box::new(n));
                }
                head = node.next.take();
                curr += node.val;
            }
            None
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    国内在线协作工具有哪些?
    最新Cocos Creator 3.x 如何动态修改3D物体的透明度
    智能人体存在感知方案,毫米波雷达感应器成品,智能化感知联动应用
    k8s教程(11)-pod调度概述
    Virtualbox中对SD卡进行格式化和分区
    迭代器模式
    彻底理解Java并发:Java内存模型
    快速导入mysql较大的SQL文件
    高性能分布式对象存储——MinIO(环境部署)
    【一天一个设计模式】—— 抽象工厂模式
  • 原文地址:https://blog.csdn.net/wangjun861205/article/details/127546181