LeetCode 2. 两数相加(Add Two Numbers)
题目描述
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路
由于两数相加可能有进位,所以在相加时既要考虑上一位的进位,又要传递给下一位计算时的进位,用递归来求解,具体可分为以下几种情况:
- 当两个链表均不为空时,计算两个节点值与上一位进位的和sum,取sum的个位数构建新节点,更新进位为sum的十位数,令本节点的next指针指向下一位求和返回的节点
- 当两个链表其中一个为空时,计算不为空的节点值与上一位进位的和sum,更新进位为sum的十位数。若进位不为0,取sum的个位数构建新节点,令本节点的next指针指向下一位求和返回的节点,注意只传递不为空的链表;若进位为0,则直接更新不为空节点的值为sum,此时此链表之后的所有高位值都不会更新,因此返回此节点
- 若两个链表都为空,判断进位是否为0.若进位为0,直接返回NULL;否则构建值为进位值的新节点,并返回此结点
代码
/**
* 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) {
return addNum(l1, l2, );
}
ListNode* addNum(ListNode* l1, ListNode* l2, int add){
if(l1 && l2){
int sum = add + l1->val +l2->val;
add = sum/;
ListNode* res = new ListNode(sum%);
res->next = addNum(l1->next, l2->next, add);
return res;
}
else if(l1){
int sum = l1->val + add;
add = sum/;
if(add){
ListNode* res = new ListNode(sum%);
res->next = addNum(l1->next, l2, add);
return res;
}
else{
l1->val = sum;
return l1;
}
}
else if(l2){
int sum = l2->val + add;
add = sum/;
if(add){
ListNode* res = new ListNode(sum%);
res->next = addNum(l1, l2->next, add);
return res;
}
else{
l2->val = sum;
return l2;
}
}
else{
if(add){
ListNode* res = new ListNode(add);
return res;
}
else return NULL;
}
}
};
LeetCode 2. 两数相加(Add Two Numbers)的更多相关文章
- LeetCode 2. 两数相加(Add Two Numbers)
2. 两数相加 2. Add Two Numbers 题目描述 You are given two non-empty linked lists representing two non-negati ...
- [Swift]LeetCode2. 两数相加 | Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
- LeetCode 2:两数相加 Add Two Numbers
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- 链表两数相加(add two numbers)
问题 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它 ...
- 2.两数相加(Add Two Numbers) C++
第一想法是顺着题目的原因,将两链表分别转化为一个数字,再将数字相加,然后把结果转化为字符串,存到答案链表中.但是数据太大会溢出! 所以,要在计算一对数字的过程当中直接存储一个结果,注意结果大于9时进位 ...
- LeetCode 445. 两数相加 II(Add Two Numbers II)
445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...
- Leetcode 002. 两数相加
1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...
- LeetCode 445——两数相加 II
1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...
- 【LeetCode】两数相加
题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
随机推荐
- JS基础_基本语法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 四、redis学习(案例)
效果如下 注意:必须要开启redis服务器端 数据库 CREATE DATABASE heima; -- 创建数据库 USE heima; -- 使用数据库 CREATE TABLE province ...
- Tomcat error: failed to start connector [connector[HTTP/1.1-8080]]
出现这个问题多半是因为8080端口被占用了.换一个端口试试
- linux命令详解——ftp
ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些使用Linux 进行ft ...
- elastic 查询
1.match 查询 GET /_index/_search { "query": { "match": { " } } } 1.match 多条件查 ...
- 第三次java测验2
package java3; public class Suiji { public long a=12345L;//定义long类型的a,b,c变量 public long c=12345L; pu ...
- Java Arrays.asList注意事项
https://blog.csdn.net/kusedexingfu/article/details/77824189
- docker compose无法解析正确的版本
docker compose无法解析正确的版本.如果你使用了一个左双引号,而不是正常的双引号,docker compose将解析版本为“2”,而不是2.应该改为: version: "2&q ...
- 如何在某些情况下禁止提交Select下拉框中的默认值或者第一个值(默认选中的就是第一个值啦……)
群里有个帅哥问了这么个问题,他的下拉框刚进页面时是隐藏起来的,但是是有值的,为啥呢?因为下拉框默认选中了第一个值呗,,, 所以提交数据的时候就尴尬啦,明明没有选,但是还是有值滴.怎么办呢? 一开始看到 ...
- Kendo UI for jQuery使用教程:使用MVVM初始化(二)
[Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...