当前位置: 首页 > news >正文

LeetCode 2181.合并零之间的节点

题目描述

给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。

对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0 。

返回修改后链表的头节点 head 。

示例 1:

输入:head = [0,3,1,0,4,5,2,0]
输出:[4,11]
解释:
上图表示输入的链表。修改后的链表包含:
- 标记为绿色的节点之和:3 + 1 = 4
- 标记为红色的节点之和:4 + 5 + 2 = 11

示例 2:

输入:head = [0,1,0,3,0,2,2,0]
输出:[1,3,4]
解释:
上图表示输入的链表。修改后的链表包含:
- 标记为绿色的节点之和:1 = 1
- 标记为红色的节点之和:3 = 3
- 标记为黄色的节点之和:2 + 2 = 4

提示:

  • 列表中的节点数目在范围 [3, 2 * 10^5] 内
  • 0 <= Node.val <= 1000
  •  存在连续两个 Node.val == 0 的节点
  • 链表的 开端 和 末尾 节点都满足 Node.val == 0

思路

这是一道字符串模拟题,我们需要模拟合并的过程。首先,为链表添加一个虚拟头节点,定义pre指针用来记录结果链表的最后一个节点,初始是虚拟头节点,定义cur指针来遍历链表。如果下一个节点的值不是0,就将上一个节点的值加到下一个节点上。如果下一个节点的值是0,就将本节点连接到结果链表上,因为本节点的值已经是本段链表的值之和。最后再去除末尾的含0节点即可。

时间复杂度:O(n)

空间复杂度:O(1)

代码

C++版:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeNodes(ListNode* head) {ListNode* dummmyHead=new ListNode();ListNode* pre=dummmyHead;ListNode* cur=head->next;ListNode* tmp;while(cur->next!=nullptr){// 下一个节点的值不是0,让下一个节点的值加上当前节点的值if(cur->next->val!=0){cur->next->val+=cur->val;}else{ // 下一个节点的值是0,让pre->next=cur;pre=pre->next;}// 记录最后一个含0的节点的前一个节点if(cur->next->next==nullptr){tmp=cur;}cur=cur->next;}// 还需要去除最后一个含0的节点tmp->next=nullptr;return dummmyHead->next;}
};

Python版:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:dummyHead=ListNode()pre=dummyHeadcur=head.nexttmp=Nonewhile cur.next!=None:if cur.next.val!=0:cur.next.val+=cur.valelse :pre.next=curpre=pre.nextif cur.next.next==None:tmp=curcur=cur.nexttmp.next=Nonereturn dummyHead.next

需要注意的地方

1.本题容易忽略最后一个节点也是含0节点,需要删除最后一个节点。

http://www.lryc.cn/news/434397.html

相关文章:

  • 千益畅行,共享旅游卡,引领旅游新潮流
  • K均值聚类
  • 【Ubuntu】安装常用软件包
  • 探索全光网技术 | 全光网产品解决方案整理-(宇洪科技)
  • 资料分析(2)
  • 百元以下蓝牙耳机性价比之王品牌?四大高能性价比机型推荐
  • 考场考生行为检测数据集 7000张 带标注 voc yolo
  • 深度学习算法,该如何深入,举例说明
  • 舵机的原理及应用
  • Nacos与Eureka--微服务注册中心
  • Android 调试桥——ADB
  • 闲鱼放弃成为淘宝复刻版了吗?上线学生专属交易交流版块“学生鱼”频道
  • 【学习笔记11】如何找到twitter中自己的cookie?
  • 新办建筑智能化专项乙级设计资质,郑州企业需要达到哪些要求?
  • 项目管理:项目执行过程中的控制点——基线
  • NVIDIA驱动学习
  • 小小GCD、LCM拿下拿下
  • 如何集成Android平台GB28181设备接入模块?
  • mysql——关于表的增删改查(CRUD)
  • docker 重启容器且修改服务映射端口
  • 智能提取:OfficeImagesExtractor让文档图片提取更简单
  • 【LLM论文日更】| LLM2Vec揭秘大型语言模型的文本嵌入潜能
  • 大模型微调有必要做吗?LoRa还是RAG?
  • 机器人外呼系统如何使用呢?
  • python-月份有几天
  • 1017 Queueing at Bank
  • DPDK 测试说明
  • 上传及接收pdf文件,使用pdfbox读取pdf文件内容
  • 第一个搭建SpringBoot项目(连接mysql)
  • docker部署rabbitMQ 单机版