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的更多相关文章

  1. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters

    LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...

  2. LeetCode:1. Add Two Numbers

    题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...

  3. [LeetCode] 445. Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  4. LeetCode 面试:Add Two Numbers

    1 题目 You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  5. LeetCode #002# Add Two Numbers(js描述)

    索引 思路1:基本加法规则 思路2:移花接木法... 问题描述:https://leetcode.com/problems/add-two-numbers/ 思路1:基本加法规则 根据小学学的基本加法 ...

  6. [Leetcode Week15] Add Two Numbers

    Add Two Numbers 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/add-two-numbers/description/ Descrip ...

  7. [LeetCode] 2. Add Two Numbers 两个数字相加 java语言实现 C++语言实现

    [LeetCode] Add Two Numbers 两个数字相加   You are given two non-empty linked lists representing two non-ne ...

  8. [LeetCode] 2. Add Two Numbers 两个数字相加

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  9. LeetCode 2. add two numbers && 单链表

    add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...

随机推荐

  1. 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块

    定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...

  2. python第八十四天---十五周作业

    后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  3. MySQL 1130 - Host 127.0.0.1 is not allowed to connect to this MySQL server

    在开发中为了让开发更方便,在本地配置环境,希望可以直接访问服务器上的MySQL数据库,更方便的管理数据库, 需要在本地远程连接linux服务器的本地数据库,直接用数据库管理工具连接出现如下报错1130 ...

  4. <项目需求规格说明书> - 福大易宝

    福大易宝-<项目需求规格说明书> 流程 在开会时统一了项目的开发背景,具体功能,然后在同一个工作环境下进行该说明书的编写. 分工 1.李佳铭.杜宏庆共同负责引言和项目描述的内容. 2.刘双 ...

  5. work flow 工作流程

    常用git 命令 v-1 # 切换分支 git checkout site-v1.7.8 # 提交代码前,先拉取分支 git pull # 拉取失败说明有冲突,解决冲突... # 保存在stash之中 ...

  6. web机试

    测试: <html><style> </style><title>Demo</title> <body><div > ...

  7. WPFのclipToBounds与maskToBounds的区别

    UIView.clipsToBounds : 让子 View 只显示父 View 的 Frame 部分,子视图超出frame的部分不显示,默认为NO,设置为YES就会把超出的部分裁掉: maskToB ...

  8. win10系统安装两个版本的python,该怎么安装Django

    最近遇到一个问题,系统上安装了python2,7 和python3.5两个版本,然后使用命令:pip install Django 安装Django后却发现以下情况: Traceback (most ...

  9. Mysql主从同步(复制)(转)

    文章转自:https://www.cnblogs.com/kylinlin/p/5258719.html 目录: mysql主从同步定义 主从同步机制 配置主从同步 配置主服务器 配置从服务器 使用主 ...

  10. wordpress之插件安装和主题安装(包含常见问题)

    问题描述:安装WordPress主题及插件需要输入FTP问题,要执行请求的操作,WordPress需要访问您网页服务器的权限.请输入您的FTP登陆凭据以继续 执行如下两条命令即可安装成功: sudo ...