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

news/2024/12/22 23:09:47/

【每日一题】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

在这里插入图片描述

代码实现

java">/*** 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; // 返回新链表的头节点}
}

http://www.ppmy.cn/news/1526638.html

相关文章

OpenCV_图像像素读写操作

本文详细介绍了如何在C项目中使用OpenCV进行图像像素的读写操作,包括使用头文件声明Pixel类,通过遍历和指针方式处理灰度图和彩色图,以及在主函数中调用这些操作。 数组遍历的方式进行图像像素读写 void QuickDemo::pixelVisit_Demo(Mat&am…

前后端分离——瑞吉外卖

文章目录 1. 前后端分离开发1.1 介绍1.2 开发流程1.3 前端技术栈 2. Yapi2.1 介绍2.2 使用 3. Swagger3.1 介绍3.2 使用方式1、导入knife4j的maven坐标2、导入knife4j相关配置类 3.3 常用注解 4. 项目部署4.1 部署架构4.2 部署环境说明4.3 部署前端项目4.4 部署后端项目 1. 前后…

JAIN-SLEE 架构及如何运作

JAIN-SLEE(Java API for Integrated Networks - Service Logic Execution Environment)是一种架构,用于构建实时电信应用程序,如电话呼叫控制、短信发送、会议电话等。这类应用程序需要能够快速响应来自用户或系统的事件&#xff…

Java集合(八股)

这里写目录标题 Collection 接口List 接口ArrayList 简述 1. ArrayList 和 LinkedList 区别?⭐️⭐️⭐️⭐️2. ArrayList 和 Array 的区别?⭐️⭐️⭐️ArrayList 和 Vector 区别?⭐️⭐️ArrayList 的扩容机制?⭐️⭐️⭐️ Qu…

sqli-labs靶场自动化利用工具——第6关

文章目录 概要整体架构流程技术细节执行效果小结 概要 Sqli-Labs靶场对于网安专业的学生或正在学习网安的朋友来说并不陌生,或者说已经很熟悉。那有没有朋友想过自己开发一个测试脚本能实现自动化化测试sqli-labs呢?可能有些人会说不是有sqlmap&#…

烧结机等调速系统电气设计-大作业/毕设

目录 1. 主要任务2.设计框架原理部分举例:选型部分举例:方案设计部分举例: 3. 交流讨论 1. 主要任务 以烧结机为例,设计基于PLC控制变频器对烧结机的调速系统的设计。主要运用了变频器,PLC等设备。并基于某型号变频器…

什么是 HTTP/3?下一代 Web 协议

毫无疑问,发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建,并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…

SpringBoot教程(安装篇) | RabbitMQ的安装

SpringBoot教程(安装篇) | RabbitMQ的安装 一、下载RabbitMQ(windows版本)1. 先下载 RabbitMQ2. 再下载Erlang3. 开始安装 Erlang4. 为Erlang配置环境变量5、验证安装6. 开始安装 RabbitMQ7. 启用RabbitMQ的管理插件(图…