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. List基础操作

    /** * List基础操作 * Created by zhen on 2018/11/14. */ object ListDemo { def main(args: Array[String]) { ...

  2. SOAP REST

    SOAP是基于RPC原理,是传统程序的函数调用和返回在RPC中被请求和应答代替了而已. SOAP Simple Object Access Protocol,是一种严格定义的信息交换协议,用于在web ...

  3. 【PAT】B1084 外观数列(20 分)(纯C)

    第一层循环,用来循环计算第几个元素 第二层用来计算当前元素的下一个 #include<stdio.h> #include<string.h> char aaa[100000] ...

  4. PHP LAMP环境搭建及网站配置流程(完整版)

    心血来潮想做一个自己的博客网站,写一些文章做技术分享,平时遇到的一些问题的解决办法都记录下来,网站搭建成功,那么第一篇博客自然就是整个网站的搭建以及域名的注册.备案.解析流程,总共分为以下几步: 1. ...

  5. switch选择结构

    switch( 表达式 )//表达式可以使用byte,short,int,char { case 值1: 逻辑语句: break;//跳出switch语句 case 值2: 逻辑语句; break; ...

  6. VRS——备忘

    1.所有版本VRS,注释掉m_ChisauarePRN参数 2.注释掉所有的MODULE_GNSSMonitor_ID,暂时用不到.但是会造成basestation崩掉. n.RegisterStat ...

  7. SAP CRM 开发学习资料和教程整理【不定时更新】

    本文链接:http://www.cnblogs.com/hhelibeb/p/6276929.html 首先是SAP网站上面的相关内容 SAP Customer Relationship Manage ...

  8. Activity声明周期1

    oncreate():在Activity对象第一次创建时调用 onStart():当Activity变得可见时调用该函数 onResume():当Activity开始准备于用户交互时调用该方法(即获得 ...

  9. request.servervariables参数

    ServerVariables ServerVariables 集合检索预定的环境变量. 语法 Request.ServerVariables (server environment variable ...

  10. Javascript中的各结构的嵌套和函数

    各位朋友大家好,上周更新给大家分享了JavaScript的入门知识及各种常用结构的用法,那么,本次更新博主就跟大家更深入的聊一聊JS各结构的嵌套用法,及JS中及其常用的一种结构——函数.以下为函数和循 ...