LeetCode之Add Two Numbers
Add Two Numbers

方法一:
考虑到有进位的问题,首先想到的思路是:
先分位求总和得到 totalsum,然后再将totalsum按位拆分转成链表;
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int sum = ;
int i = ;
while(l1 != NULL && l2 != NULL)
{
sum += i*(l1->val + l2->val);
i *= ;
l1 = l1->next;
l2 = l2->next;
}
while(l1 != NULL)
{
sum += i * (l1->val);
i *= ;
l1 = l1->next;
}
while(l2 != NULL)
{
sum += i * (l2->val);
i *= ;
l2 = l2->next;
}
//fen
ListNode *head = new ListNode();
ListNode *p = head;
if(sum == ) return head;
while(sum!=)
{
p->next = new ListNode(sum%);
p = p->next;
sum /= ;
}
return head->next;
}
修修改改总算是通过了基本测试,但并不是100%通过;

这就奇怪了,为什么运算得好好的,遇到这组测试就偏偏出了问题。输出中间结果一看,才知道是 int 型溢出了。因此将变量 sum 和变量 i 都从int型换成 long long 型。这下总该行了吧?

没想到呀,还有更长的测试数据。
静下心来想一想,既然输入的数据是链表的形式,必然会有超过 long long 长度的情况。此解决方案存在巨大的隐患!!!
方法二:
换一种思维方式,只需要关注同等位的相加,进位1或者不进位。问题很简单嘛,同等位相加加入到新链表中,若有进位则记录到下次同等位的相加中....
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode();
ListNode *p = head;
int sum = ;
while(l1 != NULL || l2 != NULL)
{
if(l1 != NULL)
{
sum += (l1->val);
l1 = l1->next;
}
if(l2 != NULL)
{
sum += (l2->val);
l2 = l2->next;
}
p->next = new ListNode(sum%);
p = p->next;
sum /= ;
}
if(sum != )
p->next = new ListNode(sum);
return head->next;
}
基础补充
回顾下链表的创建个输出,以头结点不存内容为例。
1、链表的创建:
ListNode* CreatList()
{
ListNode *head = new ListNode();
ListNode *p = head;
int x = ;
while()
{
cin>>x;
if(x == -)
break;
p->next = new ListNode(x);
p = p->next;
}
return head;
}
2、打印链表:
void PrintList(ListNode *head)
{
ListNode* p = head;
while(p->next!=NULL)
{
p = p->next;
cout<<p->val<<"->";
}
cout<<endl;
}
LeetCode之Add Two Numbers的更多相关文章
- LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters
LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...
- LeetCode:1. Add Two Numbers
题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...
- [LeetCode] 445. Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- LeetCode 面试:Add Two Numbers
1 题目 You are given two linked lists representing two non-negative numbers. The digits are stored in ...
- LeetCode #002# Add Two Numbers(js描述)
索引 思路1:基本加法规则 思路2:移花接木法... 问题描述:https://leetcode.com/problems/add-two-numbers/ 思路1:基本加法规则 根据小学学的基本加法 ...
- [Leetcode Week15] Add Two Numbers
Add Two Numbers 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/add-two-numbers/description/ Descrip ...
- [LeetCode] 2. Add Two Numbers 两个数字相加 java语言实现 C++语言实现
[LeetCode] Add Two Numbers 两个数字相加 You are given two non-empty linked lists representing two non-ne ...
- [LeetCode] 2. 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 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...
随机推荐
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...
- python第八十四天---十五周作业
后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- MySQL 1130 - Host 127.0.0.1 is not allowed to connect to this MySQL server
在开发中为了让开发更方便,在本地配置环境,希望可以直接访问服务器上的MySQL数据库,更方便的管理数据库, 需要在本地远程连接linux服务器的本地数据库,直接用数据库管理工具连接出现如下报错1130 ...
- <项目需求规格说明书> - 福大易宝
福大易宝-<项目需求规格说明书> 流程 在开会时统一了项目的开发背景,具体功能,然后在同一个工作环境下进行该说明书的编写. 分工 1.李佳铭.杜宏庆共同负责引言和项目描述的内容. 2.刘双 ...
- work flow 工作流程
常用git 命令 v-1 # 切换分支 git checkout site-v1.7.8 # 提交代码前,先拉取分支 git pull # 拉取失败说明有冲突,解决冲突... # 保存在stash之中 ...
- web机试
测试: <html><style> </style><title>Demo</title> <body><div > ...
- WPFのclipToBounds与maskToBounds的区别
UIView.clipsToBounds : 让子 View 只显示父 View 的 Frame 部分,子视图超出frame的部分不显示,默认为NO,设置为YES就会把超出的部分裁掉: maskToB ...
- win10系统安装两个版本的python,该怎么安装Django
最近遇到一个问题,系统上安装了python2,7 和python3.5两个版本,然后使用命令:pip install Django 安装Django后却发现以下情况: Traceback (most ...
- Mysql主从同步(复制)(转)
文章转自:https://www.cnblogs.com/kylinlin/p/5258719.html 目录: mysql主从同步定义 主从同步机制 配置主从同步 配置主服务器 配置从服务器 使用主 ...
- wordpress之插件安装和主题安装(包含常见问题)
问题描述:安装WordPress主题及插件需要输入FTP问题,要执行请求的操作,WordPress需要访问您网页服务器的权限.请输入您的FTP登陆凭据以继续 执行如下两条命令即可安装成功: sudo ...