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. 通用triggerEvent方法

    假设有一个id为testA的a元素,然后有以下代码(jquery已存在): $(document).ready(function(){ $('#testA').on('testEvent', func ...

  2. Django之验证

    1. 滑动验证码补充说一下 极验科技:https://docs.geetest.com/install/deploy/server/python#下载SDK按照人家的实例操作即可 1.pip inst ...

  3. LeetCode题解之Insert into a Binary Search Tree

    1.题目描述 2.分析 插入算法. 3.代码 TreeNode* insertIntoBST(TreeNode* root, int val) { insert(root, val); return ...

  4. 根据学习廖雪峰老师的git教程做的笔记

    根据学习廖雪峰老师的git教程做的笔记 安装git 进行git的配置 配置您的用户名和邮箱地址,使用--global 这个参数表明了在此台机器上的所有仓库都会使用该配置 $ git config -- ...

  5. 3星|《创投42章经》:前VC投资人的商业评论文集

    创投42章经:互联网商业逻辑与投资进阶指南 作者2014年入行VC做投资人,2016年退出改作自媒体.书中主要是作者的各类商业评论的文集,少部分是跟投资相关的内容. 投资相关的内容,有些作者自己的视角 ...

  6. Cannot uninstall 'pyserial'. It is a distutils installed project and thus we cannot a ccurately determine which files belong to it which would lead to only a partial uninstall. 解决方法

    最近再升级 pyserial模块时,采用 pip install --upgrade pyserial,待模块下载完成准备卸载原版本时 提示:“Cannot uninstall 'pyserial'. ...

  7. RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  8. Java中关于AbstractQueuedSynchronizer的入门(一)

    备注:博文仅仅是学习过程中的零散记录,后期整理. AbstractQueuedSynchronizer的简单介绍可以网上搜索,简单了解字段作用. 示例代码,分析获取锁的过程: import java. ...

  9. blinker语音控制Arduino/esp8266开关灯-滑动条使用-文本框交互

    总链接:  https://www.arduino.cn/thread-78393-1-1.html 语音控制:https://doc.blinker.app/?file=005-App%E4%BD% ...

  10. redsi一主两从三哨兵

    1.前提准备 防火墙,selinux,主机名解析,所有主机安装gcc [root@localhost ~]# vim /etc/hosts 192.168.122.135  redis_master ...