Q:

A:

这种题的用例是一定会搞一些很大的数的。long都会溢出,所以我们就不用尝试转数字做加法转链表的方法了。另外直接倒置两个链表再做加法的做法会改变原链表,题干也说了禁止改动原链表。

1.求两个链表长度,如果一长一短,把短的前面加若干个0节点,使得两个链表长度相同。之后对于就递归连接链表。dfs函数参数为前一个结果链表指针pre,当前的两个数据链表指针p1、p2。在函数中首先新建节点与pre相连,之后递归p1、p2的后继链表。dfs函数返回的是进位值,1或0。递归函数的进位值返回后要加在当前节点val上,若有进位继续返回给上级节点。
/**
* 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==0 and l2==0){
return 0;
}
int len1=0,len2=0;
ListNode* p=l1;
while(p){
++len1;
p=p->next;
}
p=l2;
while(p){
++len2;
p=p->next;
}
p=new ListNode(0);
ListNode* n_head=p;
for(int i=1;i<abs(len1-len2);++i){
ListNode* pre_p=p;
p=new ListNode(0);
pre_p->next=p;
}
if(len1<len2){
p->next=l1;
l1=n_head;
}
else if(len1>len2){
p->next=l2;
l2=n_head;
}
ListNode* res=new ListNode(1); //incase sum of l1 and l2 >9
int c=dfs(res,l1,l2);
if(c==1){
return res;
}
else{
return res->next;
}
}
int dfs(ListNode* pre, ListNode* p1,ListNode* p2){ //return carry
ListNode* cur=new ListNode((p1->val+p2->val)%10);
pre->next=cur;
int carry=(p1->val+p2->val)/10; //carry to be returned
if(p1->next){
if(dfs(cur,p1->next,p2->next)==1){
cur->val=(cur->val+1)%10;
carry=(p1->val+p2->val+1)/10;
}
}
return carry;
}
};
2.用两个栈存两个链表倒序的值。思路是我们做加法是从小位加到大位,故考虑用栈可以方便的倒置位数。
/**
* 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) {
stack<int> stack1,stack2;
while(l1){
stack1.push(l1->val);
l1=l1->next;
}
while(l2){
stack2.push(l2->val);
l2=l2->next;
}
ListNode* head=0;
int carry=0;
while(!stack1.empty() or !stack2.empty() or carry){
ListNode* p=new ListNode(carry);
if(!stack1.empty()){
p->val+=stack1.top();
stack1.pop();
}
if(!stack2.empty()){
p->val+=stack2.top();
stack2.pop();
}
if(p->val>9){
p->val=p->val%10;
carry=1;
}
else{
carry=0;
}
p->next=head;
head=p;
}
return head;
}
};

445. 两数相加 II的更多相关文章

  1. LeetCode 445. 两数相加 II(Add Two Numbers II)

    445. 两数相加 II 445. Add Two Numbers II 题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个 ...

  2. Java实现 LeetCode 445 两数相加 II

    445. 两数相加 II 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会 ...

  3. LeetCode 445——两数相加 II

    1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...

  4. Leetcode 445. 两数相加 II

    1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...

  5. 力扣 - 445. 两数相加 II

    目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...

  6. 445 Add Two Numbers II 两数相加 II

    给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表.你可以假设除了数字 0 之外,这两个数字都不会以零开头.进阶:如果输入链表 ...

  7. [Swift]LeetCode445. 两数相加 II | Add Two Numbers II

    You are given two non-empty linked lists representing two non-negative integers. The most significan ...

  8. LeetCode 445. Add Two Numbers II (两数相加 II)

    题目标签:Linked List 题目给了我们两个 数字的linked list,让我们把它们相加,返回一个新的linked list. 因为题目要求不能 reverse,可以把 两个list 的数字 ...

  9. [leetcode]445. Add Two Numbers II 两数相加II

    You are given two non-empty linked lists representing two non-negative integers. The most significan ...

随机推荐

  1. git pull报错you do not have permission to pull from the repository

    you do not have permission to pull from the repository解决方法   使用git进行项目的版本管理,换了台电脑,配置了账号和邮箱后,pull一个项目 ...

  2. 深入浅出Mybatis系列四-配置详解之typeAliases别名(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(三)---配置详解之properties ...

  3. vue踩坑:vue+ element ui 表单验证有值但验证失败。

    一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item l ...

  4. 2019-08-20 纪中NOIP模拟A组

    T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...

  5. git内容补充-Git零基础快速入门-苏玲

    https://git-scm.com/book/zh/v2 git历史 集中式版本控制管理:cvs.svn 分布式版本控制管理:git 基本命令 git config --list --global ...

  6. AcWing 10. 有依赖的背包问题

    #include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...

  7. linux多线程编程的应用场景

  8. Qtree1 - 树链剖分

    树剖裸题?(复习练练手) // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; ],size[], ...

  9. eureka server 单节点与多节点部署演示

    环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...

  10. python爬取连续一字板股票及当时日期数据【原创分享】

    本篇为个人测试记录,记录爬取连续一字板的股票及当时日期. import tushare as ts import pandas as pd import time # 筛选一字板的策略 def gp_ ...