算法练习之leetcode两数相加(1)
题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
涉及到的知识点:
C++链表及其创建
C++链表的创建在此不再赘述,主要是由结构体来定义。主要说一下使用构造函数初始化结点的问题。
如下函数是利用构造函数对链表进行初始化的代码
struct ListNode {double value;ListNode *next;//构造函数ListNode(double valuel, ListNode *nextl = nullptr){value = value1;next = next1;} };
创建一个短的链表存储两个值,第一个值是12.5,第二个值是13.5。
代码如下:
ListNode *secondPtr = new ListNode(13.5);
ListNode *head = new ListNode(12.5, secondPtr);
因为构造函数里面对链表的值和移动指针都进行初始化了,所以我们可以简化代码,如下:
ListNode *head = new ListNode(13.5);
head = new ListNode(12.5, head);
基本的知识点也就这些理解了之后基本可以理解以下题解代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head=new ListNode(-1);//存放结果的链表
ListNode* h=head;//移动指针
int sum=0;//每个位的加和结果
bool carry=false;//进位标志
while(l1!=NULL||l2!=NULL)
{
sum=0;
if(l1!=NULL)
{
sum+=l1->val;
l1=l1->next;
}
if(l2!=NULL)
{
sum+=l2->val;
l2=l2->next;
}
if(carry)
sum++;
h->next=new ListNode(sum%10);
h=h->next;
carry=sum>=10?true:false;
}
if(carry)
{
h->next=new ListNode(1);
}
ptrDelete = head;
//由于之前初始创建的 val = -1 的节点没有释放啊,c++要手动释放,否则调用次数多会溢出
head = head->next;
delete ptrDelete;
return head;
}
};
算法练习之leetcode两数相加(1)相关推荐
- LeetCode两数相加
一.两数相加 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...
- leetcode 两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 简单算法题:leetcode-2 两数相加
算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...
- leetcode 两数相加c++_167. 两数之和 II - 输入有序数组
167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1和 index2,其中 index1必须小 ...
- leetcode 两数相加,在ubuntu上编译通过,显示结果了,在leetcode上报错了,找错在哪?
给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 0 ...
- leetcode第一题两数相加
leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...
- leetcode算法—两数相加 Add Two Numbers
关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
最新文章
- Java还欠缺什么才能真正支持机器/深度学习?
- 什么原数据更容易平稳_【时间序列】-航空数据预测
- 自学python找工作难吗-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
- 单引号和冒号不能存入mysql么_mysql单引号和双引号的用法
- Python学习——collections系列
- 使用TensorFlow在Transformers 上生成字幕的注意机制的实现
- I2C(smbus、pmbus)和 SPI协议
- 【黑苹果镜像】macOS Monterey 12.3正式版 (21E230) With OpenCore 0.7.9 and Clover 5144 and winPE原版镜像
- 像“毒液”一样的粘液机器人火了,能取出体内异物,穿过1.5mm细缝无压力!...
- 中南大学计算机学院闭委,2019-2020计算机学院第一学期学委会议顺利召开
- 微信小程序运用云函数调用新闻类API
- [MTCTF]从出题人视角看ez_cms
- 4-Python3从入门到实战—基础之数据类型(字符串-String)
- == 和 ===的区别
- 亲爱的老狼-搜索引擎的区分及现在各大浏览器的引擎细分
- bootice添加黑苹果引导_NUC8 x 黑苹果抄作业续集,快速迁移 OpenCore + 升级 Big Sur...
- msysgit使用说明
- linux 服务器 病毒,Linux 服务器中木马病毒及清除过程
- mp3音频转换器哪个好
- ryu实例---自学习交换机