题目

两个数字求和,数字用链表表示,每一个结点代表一位。链表顺序与数字顺序相反,即表头存放数字的最低位。

解法

分别遍历两个链表的每个结点,对两个结点求和即可。要维护一个变量保存每次相加之后的进位。

更常见的,链表顺序与数字顺序相同,那么做一次链表逆序,求和之后再逆序回来即可。

代码

 /**
* 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) {
ListNode retHead(-), *pr = &retHead, *p1 = NULL, *p2 = NULL;
int carry = ;  //保存每次结点求和之后的进位,用一个bool也可以 for(p1 = l1, p2 = l2; p1 != NULL && p2 != NULL; p1 = p1->next, p2 = p2->next) //p1 p2分别遍历两个链表
{
int sum = p1->val + p2->val + carry;
pr->next = new ListNode(sum % );  //求和结果保存在新结点 pr = pr->next;    //p2指向求和链表的尾结点
carry = sum / ;
} for(ListNode *p = (p1 == NULL ? p2 : p1); p != NULL; p = p->next) //处理两个链表中未处理完的链表剩余节点
{
int sum = p->val + carry;
pr->next = new ListNode(sum % ); pr = pr->next;
carry = sum / ;
} if(carry != )  //如果最后还有进位,必定是1
{
pr->next = new ListNode(carry);
} return retHead.next;
}
};

LeetCode题解——Add Two Numbers的更多相关文章

  1. [LeetCode 题解]: Add Two Numbers

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

  2. leetcode 题解 Add Two Numbers(两个单链表求和)

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

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

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

  4. LeetCode:1. Add Two Numbers

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

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

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

  6. [Leetcode Week15] Add Two Numbers

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

  7. LeetCode 面试:Add Two Numbers

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

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

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

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

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

随机推荐

  1. 手机开发类型jquery的框架Zepto(API)

    Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. http://www.html-5.cn/M ...

  2. KafkaSpout的处理流程

    基于0.93版本Storm 首先,如果自己写KafkaSpout,该怎么办?有哪些地方需要考虑呢 1. 得实现Storm指定的接口.这样Storm才能够使用它.那么需要实现什么接口?需要提供什么功能给 ...

  3. python time相关操作

    1.获取当前时间的两种方法: 代码如下: import datetime,timenow = time.strftime("%Y-%m-%d %H:%M:%S")print now ...

  4. DLL 支持MFC 没有DLLMAIN函数

    如果使用VC编写DLL时,需要MFC功能: 一般在源文件里就不能手动写DLLMAIN函数了 它给MFC集成了,\src\mfc\dllmodule.cpp打开它,里面有有一个DLLMAIN函数,根据源 ...

  5. [LeetCode]Divide Two Integer

    Divide two integers without using multiplication, division and mod operator. 思考:位运算.AC的时候真的想说一句“尼玛.. ...

  6. vim查找/替换字符串 及一些高级用法

    例: 32 ./run 0_39.pkt 0_39.jpg 33 ./run 0_3.pkt 0_3.jpg 34 ./run 0_40.pkt 0_40.jpg 35 ./run 0_41.pkt ...

  7. intelliJ idea读取资源文件

    原文:intelliJ idea读取资源文件 原文地址 http://yanwushu.sinaapp.com/intellij-idea_raed_resource_file/ 官方文档 以下是je ...

  8. James搭建邮件服务器

    来源:http://chenfengcn.iteye.com/blog/356874   1 关于James与Javamail Apache James(Java Apache Mail Enterp ...

  9. node.js 异步式I/O 与事件驱动

    Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一 ...

  10. 微信5.4 AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8" ?> - <manifest android:versionCode ...