You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

题意:求以链表形式表示的两非负整数之和,高位在后。

思路:联想数组形式的计算,以一个变量carry为对应位置的和,carry%10为当前值,carry/10为进位。在数组里,直接在长度较大的数组更新值就行,但是链表的长度没法直接获得。所以出现了问题一:如何保存数据。所以针对这个问题有两种解法,但求和的思想还是不变。问题二、若是最高位有进位,怎么办?这种情况下,只能新建一个结点,然后赋值。

方法一:开辟一个新的链表,每次都是将对应的值赋给新开辟的结点。这就遇到循环条件的问题,若是l1&&l2则会遇到有其中一个链表遍历完时,剩下的链表的进位情况,若剩下的结点值全是9,即存在进位的可能则可能有需要另一个while循环,所以这里为代码的简洁还是用 l1||l2 。还有一点值得注意的是,对当前结点的取值一定要在当前结点存在的情况下,不然会造成错误。代码如下:

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
if(l1==NULL) return l2;
if(l2==NULL) return l1; int carry=;
ListNode *nList=new ListNode(-);
ListNode *pre=nList; while(l1||l2)
{
if(l1)
{
carry+=l1->val;
l1=l1->next;
}
if(l2)
{
carry+=l2->val;
l2=l2->next;
} pre->next=new ListNode(carry%);
carry/=;
pre=pre->next;
} if(carry==)
pre->next=new ListNode(); return nList->next;
}
};

方法二:参考数组的做法,先找出较长的,然后更新较长链表上结点的值。参考LeetCode上的讨论

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
int flag=;
int sum=;
ListNode *pointer1=l1;
ListNode *pointer2=l2;
ListNode *result=NULL;
while(pointer1&&pointer2)
{
pointer1=pointer1->next;
pointer2=pointer2->next;
}
if(pointer1==NULL)
result=l2;
else
result=l1; ListNode *nList=result; while(l1||l2)
{
sum=(l1?l1->val:)+(l2?l2->val:)+flag;
flag=sum/;
result->val=sum%;
l1?l1=l1->next:l1;
l2?l2=l2->next:l2;
result->next?result=result->next:result; //值得注意必须先判断存在,
} //思考,若存在进位,和下面的代码会产生什么后果
if(flag==)
{
result->next=new ListNode();
} return nList;
}
};

[Leetcode] Add two numbers 两数之和的更多相关文章

  1. Leetcode:0002(两数之和)

    LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...

  2. Leetcode(1)两数之和

    Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...

  3. [LeetCode] 1. Two Sum 两数之和

    Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...

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

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

  5. LeetCode Golang实现 1. 两数之和

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

  6. Leetcode(一)两数之和

    1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...

  7. leetcode每日一题——两数之和

    题目: 两数之和 难度: 简单 描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 解法: class Solutio ...

  8. LeetCode刷题 - (01)两数之和

    题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  9. LeetCode题解001:两数之和

    两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

随机推荐

  1. 主流浏览器内核,以及CSS3前缀识别码

    现在国内常见的浏览器有:IE.Firefox.QQ浏览器.Safari.Opera.Google Chrome.百度浏览器.搜狗浏览器.猎豹浏览器.360浏览器.UC浏览器.遨游浏览器.世界之窗浏览器 ...

  2. linux总结及常用命令

    一.操作系统的作用: 1.是现代计算机系统中最基本和最重要的系统软件  2.承上启下的作用  3.向下对硬件操作进行封装  4.向上对用户和应用程序提供方便访问硬件的接口 二.不同领域的操作系统: 1 ...

  3. queue消息队列

    class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(maxsize=0) #last in fisrt out  class queue. ...

  4. 004---基于TCP的套接字

    基于TCP的套接字 tcp是基于链接的,必须先启动服务端,然后再启动客户端去连接服务端. 之前实现的简单套接字就是基于TCP的,但是只能实现收发消息一次.服务器与客户端都断开了.不够过瘾. 通信循环版 ...

  5. P1855 榨取kkksc03

    P1855 榨取kkksc03 题目描述 以下皆为真实的故事. 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. ...

  6. JAVA中堆栈和内存分配详解(摘抄)

    在Java中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存 ...

  7. **leetcode笔记--4 Sum of Two Integers

    question: Calculate the sum of two integers a and b, but you are not allowed to use the operator + a ...

  8. 自动化测试元素查找利器firepath介绍

    自动化测试查找元素和确定元素xpath路径是否正确在业界有个很好的工具就是firefox 浏览器的 firepath 问题: firefox 最新版本已经不支持firebug和firepath这两个插 ...

  9. 维特比算法(Viterbi)及python实现样例

    维特比算法(Viterbi) 维特比算法 维特比算法shiyizhong 动态规划算法用于最可能产生观测时间序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔科夫模型中.术语“维特 ...

  10. Visual Studio 2012安装包

    点击下载