这道题是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

最新文章

  1. OpenCascade Chinese Text Rendering
  2. Android Studio 个人常用设置
  3. [C#.net]PostMessage与SendMessage的区别
  4. linux-11 基本命令之 -工作期目录切换命令-pwd,cd,
  5. 微信公众平台JSSDK开发
  6. alpha发布用户数
  7. 转-- WebView使用实例(html5、文件下载和远程URL)
  8. swift-自定义无限轮播图
  9. IE下无法保存Cookie和Session问题
  10. SparkSQL配置和使用初探
  11. 转:7个鲜为人知却超实用的PHP函数
  12. HDU-简单计算器-1237
  13. JQuery5.04获取
  14. How To : Create SQL Server Management Studio Addin
  15. 关于requirejs中的define的原理理解
  16. 人生第一次hash
  17. jquery版 发同步请求 自定义头部信息 公共请求体
  18. Hi,给他介绍一款markdown的帮助文档生成器
  19. Nginx+Keepalived搭建高可用负载均衡集群
  20. 解决 tomcat 重启上传文件消失

热门文章

  1. 用java自带jdk开发第一个java程序
  2. CF1072C Cram Time
  3. uvm_factory——我们的工厂(三)
  4. NF!=1
  5. github入门之配置github本地仓库--2
  6. Oracle种常用性能监控SQL语句
  7. 题解 CF440A 【Forgotten Episode】
  8. 线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)
  9. bootstrap历练实例:标签式的导航菜单
  10. iOS 设计模式