【LeetCode】Add Two Numbers(两数相加)
这道题是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(两数相加)的更多相关文章
- LeetCode(2):Add Two Numbers 两数相加
		Medium! 题目描述: 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头 ... 
- [CareerCup] 18.1 Add Two Numbers 两数相加
		18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. 这道题让我 ... 
- Leetcode2.Add Two Numbers两数相加
		给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ... 
- [LeetCode]2.Add Two Numbers 两数相加(Java)
		原题地址: add-two-numbers 题目描述: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字. 请你将两个数相加,并以相同形式返回 ... 
- 【LeetCode】2. Add Two Numbers 两数相加
		给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ... 
- [leetcode]2. Add Two Numbers两数相加
		You are given two non-empty linked lists representing two non-negative integers. The digits are stor ... 
- LeetCode 2. Add Two Numbers (两数相加)
		题目标签:Linked List, Math 题目给了我们两个 Linked List, 各代表一个数字,不过顺序的反的.让我们把两个数字相加. 和普通的相加其实差不多,只不过变成了 Linked L ... 
- [Leetcode] Add two numbers 两数之和
		You are given two linked lists representing two non-negative numbers. The digits are stored in rever ... 
- LeetCode  Add Two Numbers 两个数相加
		/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ... 
随机推荐
- js AES对称加密 16进制和base64格式
			<!doctype html> <html> <head> <meta charset="utf-8"> <title> ... 
- Java基础之入门介绍
			基础知识 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java ... 
- Spring Boot :Druid Monitor
			忙里偷个闲,在这里分享一下SpringBoot集成Druid实现数据库监控功能,有什么错误欢迎大家指出! 参考文件: Spring实现Druid监控:https://www.cnblogs.com/w ... 
- 洛谷 2299 Mzc和体委的争夺战
			题目背景 mzc与djn第四弹. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁(做过前三弹的都知道).但如此之多的男家丁吸引来了我们的体委(矮胖小伙),他要来与mzc争夺男家丁. mzc很生气 ... 
- mysql Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona
			1. 操作mysql的时候提示如下错误 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and cont ... 
- Linux下文件以及文件名编码转换
			1.查看文件编码方式--file 文件名(但不是很准确) yang@mint-linux ~ $ file baidu.html baidu.html: HTML document, UTF-8 Un ... 
- leetcode_1033. Moving Stones Until Consecutive
			https://leetcode.com/problems/moving-stones-until-consecutive/ 题意:给定3个点,每次从两个端点(位置最小或位置最大)中挑选一个点进行移动 ... 
- Asp.Net Core 进阶(三)—— IServiceCollection依赖注入容器和使用Autofac替换它
			Asp.Net Core 提供了默认的依赖注入容器 IServiceCollection,它是一个轻量级的依赖注入容器,所以功能不多,只是提供了基础的一些功能,要实现AOP就有点麻烦,因此在实际工作当 ... 
- CPP-基础:关于多态
			类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visua ... 
- ViewController的lifecycle和autolayout
