【Leetcode -141.环形链表 -2.两数相加】

news/2025/1/12 0:46:24/

Leetcode

  • Leetcode -141.环形链表
  • Leetcode -2.两数相加

Leetcode -141.环形链表

题目:给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

提示:
链表中节点的数目范围是 [0, 10^4]
-10^5 <= Node.val <= 10^5
pos 为 -1 或者链表中的一个 有效索引 。

我们的思路是快慢指针,定义两个指针fast和slow,fast每次走两步,slow每次走一步,如果有环的话,fast一定能追上slow;如图:

在这里插入图片描述

fast走两步,slow走一步:
在这里插入图片描述
fast走两步,slow走一步:

在这里插入图片描述

最终fast追上slow,即它们相等的时候;
在这里插入图片描述

代码:

		bool hasCycle(struct ListNode *head) {struct ListNode *fast = head,*slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){return true;}}return false;}

Leetcode -2.两数相加

题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

我们的思路是,将链表逐一相加拿下来,计算两个结点val之和,因为每个结点只能存放0-9的数字,所以每十进一,用flag来存放这个一,所以两个结点val之和加上flag,再取余才是拿下来放进新链表的val;当两个链表都空了,如果flag中还留着一,那么要再开辟一个结点,val为1,放到新链表的尾部;

如图,第一次相加:

在这里插入图片描述

第二次相加,n1+n2 = 10,需要进一,所以flag在相加完后变成1;

在这里插入图片描述

第三次相加:

在这里插入图片描述

当两个链表都走完,但是上两个结点相加进10,flag还留了个1,所以要再开辟一个结点,存放1,把它放到链表的尾部;
在这里插入图片描述

最后的结果:

在这里插入图片描述

		struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){struct ListNode* tail = NULL, * head = NULL;int flag = 0, n1, n2;//当l1或者l2其中一个不为空时继续while (l1 || l2){//判断l1或者l2是否为空,为空则返回0,不为空则返回它的valn1 = l1 ? l1->val : 0;n2 = l2 ? l2->val : 0;//定义sum等于两节点之和加上flagint sum = n1 + n2 + flag;//初次相加if (tail == NULL){struct ListNode* p = malloc(sizeof(struct ListNode));tail = head = p;tail->val = sum % 10;tail->next = NULL;}//非初次相加else{struct ListNode* p = malloc(sizeof(struct ListNode));p->val = sum % 10;p->next = NULL;tail->next = p;tail = tail->next;}//flag取sum的商,即判断sum是否大于等于10flag = sum / 10;//如果l1不为空,l1继续迭代if (l1){l1 = l1->next;}//如果l2不为空,l2继续迭代if (l2){l2 = l2->next;}}//若上一次相加的进一还没处理,就直接开辟一个结点,val为1,放到链表的尾部if (flag == 1){struct ListNode* p = malloc(sizeof(struct ListNode));p->val = 1;p->next = NULL;tail->next = p;}return head;}

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

相关文章

免费域名申请

title: 免费域名申请 20230428153405|left &#x1f308;Description&#xff1a; ​ 本文将介绍如何免费申请域名&#xff0c;在最近的折腾中发现&#xff0c;域名真的很重要&#xff0c;不然好多服务是无法访问的。 备注&#xff1a;由于freenom基于技术原因&#xff0c;暂时…

利用电脑和手机MT4平台软件设置报警功能的方法及步骤

使用MT4&#xff08;MetaTrader 4&#xff09;的报警功能&#xff0c;就可以在汇率达到指定数值&#xff0c;或者是在EA进场买进或结束交易的时候在手机接受推播通知。即使正在外出&#xff0c;也不会因此而错失机会&#xff0c;也可以借此确认进场交易内容&#xff0c;是相当便…

同为科技(TOWE)科普与雷电相关的基本知识

前 言 雷电是伴有闪电和雷鸣的放电现象&#xff0c;壮观而又有点令人生畏。雷电一般产生于对流发展旺盛的积雨云中&#xff0c;常伴有强烈的阵风和暴雨&#xff0c;有时还伴有冰雹和龙卷风。夏季雷电时有发生&#xff0c;虽然常见&#xff0c;但你真的了解雷电吗&#xff1f;这…

软考(中/高级)高频考点——进度管理

现在距离2023年上半年软考仅有一个多月时间了&#xff0c;相信很多考友都进入火热的备考状态了。 为了给备考的考友们减轻备考难点&#xff0c;小编特意为大家整理了软考&#xff08;中/高级&#xff09;的一些高频考点——进度管理&#xff0c;希望对正在备考软考的你有所帮助…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本&#xff08;如果有&#xff0c;可选&#xff0c;非必须&#xff09;3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

Nestjs全网最佳翻译-概况-守卫-Guards

守卫 带上装饰器 Injectable() 并实现了 CanActivate 接口的类&#xff0c;就是守卫。 守护只做一件事情。他们根据运行时的某些条件&#xff08;如权限、角色、ACL等&#xff09;来决定一个给定的请求是否会被路由处理程序处理。这通常被称为授权。在传统的Express应用程序中…

4.24日报

Redis 有哪些功能&#xff1f; 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列 181. Redis 和 memcache 有什么区别&#xff1f; 存储方式不同&#xff1a;memcache 把数据全部存在内存之中&#xff0c;断电后会挂掉&#xff0c;数据不能超过内存大小&…

修炼汇编语言第二章:内存地址空间(概述)

目录 前言 一、主板和接口卡 二、存储器各类芯片 三&#xff1a;内存地址空间 总结 前言 什么是内存地址空间呢&#xff1f;如果地址线为10&#xff0c;那么可以寻址1024个地址空间&#xff0c;这1024个地址空间就构成这个CPU的内存地址空间&#xff0c;下面本文将会介绍…