Leetcode:2. 两数相加
题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路分析:
这题是链表相关的题,主要考察的其实就是链表的相关操作。解题思路是很直接,就是对于两个链表同步的去遍历,相加,判断是否有进位。同时需要注意两个待相加链表的长度可能不一致,所以需要多一个判断。最终的停止条件是两个链表都已经遍历到最后。
代码上,我首先用最简单的思路做了一遍,之后还有一个版本是更简化了一点。
代码:
/**
* 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) {
if(l1 == nullptr || l2 == nullptr)
return nullptr;
ListNode* head = new ListNode();
ListNode* res = head;
int plusone = ;
while(l1!=nullptr && l2!=nullptr)
{
int sum = l1->val + l2->val + plusone;
plusone = ;
if(sum >= )
{
plusone = sum/;
}
res->next = new ListNode(sum % );
res = res->next;
l1 = l1->next;
l2 = l2->next;
}
while(l1 != nullptr)
{
int sum = l1->val + plusone;
plusone = ;
if(sum >= )
{
plusone = sum/;
}
res->next = new ListNode(sum % );
res = res->next;
l1 = l1->next;
}
while(l2 != nullptr)
{
int sum = l2->val + plusone;
plusone = ;
if(sum >= )
{
plusone = sum/;
}
res->next = new ListNode(sum % );
res = res->next;
l2 = l2->next;
}
if(plusone)
{
res->next = new ListNode(plusone);
res = res->next;
}
return head->next;
}
};
/**
* 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) {
if(l1 == nullptr || l2 == nullptr)
return nullptr;
ListNode* head = new ListNode();
ListNode* res = head;
int plusone = ;
while(l1!=nullptr || l2!=nullptr)
{
int a = (l1==nullptr ? : l1->val);
int b = (l2==nullptr ? : l2->val);
int sum = a + b + plusone;
plusone = ;
if(sum >= )
{
plusone = sum/;
}
res->next = new ListNode(sum % );
res = res->next;
if(l1!=nullptr)
l1 = l1->next;
if(l2!=nullptr)
l2 = l2->next;
} if(plusone)
{
res->next = new ListNode(plusone);
res = res->next;
}
return head->next;
}
};
Leetcode:2. 两数相加的更多相关文章
- LeetCode 445——两数相加 II
1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...
- Leetcode 002. 两数相加
1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- Leetcode 445. 两数相加 II
1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...
- LeetCode 445. 两数相加 II(Add Two Numbers II)
445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...
- LeetCode 2. 两数相加(Add Two Numbers)
2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...
- LeetCode 2——两数相加(JAVA)
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- leetcode TOP100 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 【LeetCode】两数相加
题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
- leetcode 链表 两数相加
两数相加 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
随机推荐
- js计算得来的属性
计算得来的属性 如果需要使用表达式来创建属性键,那么需要使用方括号.否则属性名称不会进行计算: var obj = { 'b'+'ar': 'foo' }; // SyntaxError: missi ...
- Django:RestFramework之-------视图
10.视图 GenericAPIView封装一些方法,将这些方法返回值放在类变量位置上. 1.GenericAPIView视图示例:不怎么用 from api.utils.serializers.pa ...
- Vue第一天
什么是 Vue.js? Vue.js是前端的主流框架之一,与 Angular.js.React.js一起,并称为前端三大主流框架 Vue.js是一套构建用户界面的框架,只关注视图层,它不仅易上手,还便 ...
- 面试题:什么叫B树
B是balanced的意思 是在二叉查找树 树的基础上增加了平衡的性质 导致它不是 二叉树了,变成了多叉树,但是叉几路又有了限制 否则怎么平衡呢 一棵m阶B树(balanced tree o ...
- Windows Server 2012 R2 远程桌面自动设置为不允许连接问题解决方案
用“gpedit.msc”调出策略组设置窗口,在策略组界面点击:计算机配置->管理模块->Windows组件->远程桌面服务->远程桌面会话主机->连接->允许用户 ...
- OSPF 多区域配置
通过配置OSPF协议使网络互通. 实验拓扑 如图所示连接,地址规划如下: 名称 接口 IP地址 R1 f1/0 192.168.10.1/24 R1 f0/0 192.168.20.1/24 R1 f ...
- shell中read用法
1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 1 2 3 echo -n "Input m ...
- python导入模块被加横线
2018-07-03 04:20:41 bluelilyfly 阅读数 1238 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...
- Beta冲刺第5次
二.Scrum部分 1. 各成员情况 翟仕佶 学号201731103226 今日进展 新增将图片转为粉笔画功能代码 存在问题 难者不会,会者不难,主要是参数设置问题 明日安排 视情况而定,可能还是写扩 ...
- mysql的docker版本,如何通过docker run定制服务器选项
一般用的是My.cnf文件. 如果要图省事呢? 以下的命令可供参考. 特别是--character-set-server=utf8 --collation-server=utf8_general_ci ...