【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

2024-09-09 07:04

本文主要是介绍【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

题目描述

给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。

思路分析

  1. 初始化:创建一个虚拟头节点 dummy,用于构建新的链表。同时,定义一个变量 sum 用于累加两个 0 之间的节点值。

  2. 遍历链表:从头节点的下一个节点开始遍历链表,因为头节点的值总是 0。

  3. 处理非零节点:当遇到非零节点时,将其值累加到 sum 中。

  4. 处理零节点:当遇到零节点时,表示一个区间的结束。如果 sum 大于 0,则创建一个新的节点,其值为 sum,并将这个新节点添加到新链表中。然后重置 sum 为 0,以便于累加下一个区间的值。

  5. 跳过连续的零:题目保证不会出现连续两个非零节点之间的零节点,因此不需要额外处理。

  6. 返回结果:遍历完成后,返回 dummy.next 作为新链表的头节点。

输入示例

  • 输入:head = [0,3,1,0,4,5,2,0]

  • 输出:[4,11]

  • 解释:
    上图表示输入的链表。修改后的链表包含:

  • 标记为绿色的节点之和:3 + 1 = 4

  • 标记为红色的节点之和:4 + 5 + 2 = 11

    在这里插入图片描述

  • 输入:head = [0,1,0,3,0,2,2,0]

  • 输出:[1,3,4]

  • 解释:
    上图表示输入的链表。修改后的链表包含:

  • 标记为绿色的节点之和:1 = 1

  • 标记为红色的节点之和:3 = 3

  • 标记为黄色的节点之和:2 + 2 = 4

在这里插入图片描述

代码实现

/*** 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 dummy = new ListNode(0); // 创建虚拟头节点,用于构建新链表ListNode current = dummy; // current 指向新链表的当前节点int sum = 0; // 用于累加区间节点的值// 跳过开头的 0,开始遍历head = head.next;while (head != null) {if (head.val == 0) {  // 遇到 0,表示一个区间的结束if (sum > 0) { // 如果 sum 大于 0,则创建新节点并添加到新链表中current.next = new ListNode(sum);current = current.next; // 移动 current 到新节点sum = 0; // 重置 sum 为 0,准备下一个区间}} else {// 累加非零节点的值sum += head.val;}head = head.next; // 移动到下一个节点}return dummy.next; // 返回新链表的头节点}
}

这篇关于【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150478

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5