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(12)--python关键词,包
关键词 1.什么是关键词: 就是系统已经定义好的一些关键词语法,可以直接使用,很明显的就是在IDE里这些关键词会高亮显示的就是 2.有哪些关键词: 前面我们一直在说关键词,内置函数,到底有哪些关键词对 ...
- npm与yarn常用命令对比
最近在用yarn,但是命令老是记不住,在此记录,方便日后翻看 图片截取自:http://yuanhehe.cn/2017/06/11/npm-%E4%B8%8E-Yarn-%E5%B8%B8%E7%9 ...
- Hp电脑开机报错:no boot disk has been detected or the disk has failed
hp主机开机报错no boot disk has been detected or the disk has failed,重启之后没有作用,开机之后仍然是同样界面.考虑是硬盘问题,按ESC+F10 ...
- Cocoapods的安装和使用(2018-08-07更新)
一.Cocoapods的安装 第一步:打开终端 第二步:修改ruby镜像引用 gem source --remove https://rubygems.org/ gem sources -a http ...
- i.s.h.med Enhancement for cancelling an appointment
This article intends to introduce my experience about enhancement for canceling an appointment. I tr ...
- Java面试之五大框架的理解
五大框架(springMVC,struts2,spring,mybatis,hibernate) 说说你对springMVC框架的理解? 简要口述(如果感觉说的少可以在完整答案里面挑几条说) Spri ...
- File类_常见的方法(获取目录中指定规则的内容)_listFiles
import java.io.File; public class ListDemo { public static void main(String[] args) { ListDemo(); } ...
- 控件布局_TableLayout
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android=" ...
- P1141 01迷宫 dfs连通块
题目描述 有一个仅由数字000与111组成的n×nn \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻444格中的某一格111上,同样若你位于一格1上,那么你可以移动到相邻444格 ...
- python第四十八课——类函数和对象函数
5.类函数和对象函数 类函数:在定义函数的上面一行书写@classmethod,特点:没有self 有cls 对象函数:定义在class中的普通的def函数 演示类函数和对象函数的定义使用: 总结: ...