这道题是LeetCode里的第2道题。

题目要求:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

这道题的条件判断很简单,如下:

1.是否为尾节点

2.是否产生进位

3.是否等于9

4.是否需要拓展空间

代码如下:

/**
* 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 *p = l1, *q = l2;
int add, carry = 0;//carry标志进位 while (1) {
add = p->val + q->val + carry;
p->val = add % 10;
if (add > 9)carry = 1;
else carry = 0;
if (p->next == NULL || q->next == NULL)break;
p = p->next;
q = q->next;
}
//这里就相当于是一个链表只有一个节点,另一个链表加上这个一个节点的数值
if (p->next) {//list1
p = p->next;
q = p;
while (carry) {//是否需要进位
if (q->val == 9) {//是否等于9
if (q->next == NULL) {//是否是最后一个节点
q->val = 0;
q->next = (ListNode*)malloc(sizeof(ListNode));
q->next->val = 1;
q->next->next = NULL;
break;
}
q->val = 0;
q = q->next;}
else {q->val++;carry = 0;}
}
return l1;
} if (q->next) {//list2
q = q->next;
l2 = q;
while (carry) {
if (q->val == 9) {
if (q->next == NULL) {
q->val = 0;
q->next = (ListNode*)malloc(sizeof(ListNode));
q->next->val = 1;
q->next->next = NULL;
break;
}
q->val = 0;
q = q->next;}
else {q->val++;carry = 0;}
}
p->next = l2;
return l1;
} if (carry) {
q = (ListNode*)malloc(sizeof(ListNode));
q->next = NULL;
q->val = 1;
p->next = q;
}
return l1;
}
};

运行结果:

个人总结:

在设计算法初期,造成了许多代码的累赘,以上代码是经过优化后得到的。但是在这里两个if条件中还是会有代码的重复,但能够做出来我就已经很开心了。(^-^)V

【LeetCode】Add Two Numbers(两数相加)的更多相关文章

  1. LeetCode(2):Add Two Numbers 两数相加

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

  2. [CareerCup] 18.1 Add Two Numbers 两数相加

    18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. 这道题让我 ...

  3. Leetcode2.Add Two Numbers两数相加

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  4. [LeetCode]2.Add Two Numbers 两数相加(Java)

    原题地址: add-two-numbers 题目描述: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字. 请你将两个数相加,并以相同形式返回 ...

  5. 【LeetCode】2. Add Two Numbers 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  6. [leetcode]2. Add Two Numbers两数相加

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

  7. LeetCode 2. Add Two Numbers (两数相加)

    题目标签:Linked List, Math 题目给了我们两个 Linked List, 各代表一个数字,不过顺序的反的.让我们把两个数字相加. 和普通的相加其实差不多,只不过变成了 Linked L ...

  8. [Leetcode] Add two numbers 两数之和

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

  9. LeetCode Add Two Numbers 两个数相加

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

随机推荐

  1. Eclipse Mars.2集成Maven 3.5.4

    准备材料: Eclipse Mars.2 Release (4.5.2):  官网戳:https://www.eclipse.org/downloads/ Maven 3.5.4: http://ma ...

  2. linux服务器上的jenkins远程触发构建windows server 2012服务器上的jenkins任务

    本文来自:https://blog.csdn.net/huashao0602/article/details/53318295  非常感谢原博主,亲测可行,这是我做CI持续集成试过的第6套方案了! 背 ...

  3. css命名规范—CSS样式命名整理

    CSS样式命名整理 页面结构 容器: container/wrap整体宽度:wrapper页头:header内容:content页面主体:main页尾:footer导航:nav侧栏:sidebar栏目 ...

  4. uvm_base——打好你的基础

    uvm_base 是个很有意思的文件,这是UVM很巧妙的设计,将所有在base中包含的文件都包含在uvm_base.svh, 这样很方便管理各个文件直接的关系,而且还可以看出一些我之前没看过的东西,比 ...

  5. C# 语句 分支语句

    语句是指程序命令,按照顺序执行.可以分为   顺序语句  分支语句  循环语句 之前学习的内容都是按照顺序程序执行的,称之为顺序语句. 今天学的的内容是分支语句. 语句可以嵌套,可以是以分号结尾的单行 ...

  6. ADO1

    1. 新建Web窗体 客户端控件:html控件 服务器控件:用的比较少 2. 数据库连接 protected void btnLogin_Click(object sender, EventArgs ...

  7. iOS perform action after period of inactivity (no user interaction)

    代码看完后感觉非常优秀 http://stackoverflow.com/questions/8085188/ios-perform-action-after-period-of-inactivity ...

  8. 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64 1:2.7.4-0ubuntu1.2 404 Not Found

    新部署的云服务器出现如下错误: root@iZj6cbjalvhsw0fhndmm5xZ:~# apt-get install git Reading package lists... Done Bu ...

  9. Airbnb:别抵制我,宝宝要过 10 岁生日

    今日导读 喜欢旅游的你,一定听说或使用过 airbnb(爱彼迎),在出发前打开它,总是能通过它开始一段奇妙的旅行.可是最近,就在这个打着“共享家”概念的服务型网站正迎来十周年之际,它却遭到了很多国家的 ...

  10. 快学UiAutomator配置编辑环境

    Java环境配置 1.下载jdk1.6+包 2.安装jdk,默认安装即可 3.成功安装之后,进行测试是否真的成功安装,点击[开始]----[运行]----输入 CMD,在命令提示符里面输入“Java ...