• 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
  • 相关阅读:
    Go实现udp服务
    【第38篇】MixConv:混合深度卷积核
    【校招VIP】前端计算机网络之webSocket相关
    酷开系统 | 酷开科技助推大屏营销价值提升
    LVS+Keepalived 高可用负载均衡集群
    如何使用uiautomation开发一套自动朋友圈自动点赞的桌面应用
    10月 kaggle-酶稳定性预测(群链接)
    设备树源码(即xxx.dts或xxx.dtsi文件)的格式
    python安装wind10
    4、AQS之ReentrantReadWriteLock
  • 原文地址:https://blog.csdn.net/wangjun861205/article/details/127546181