leetcode腾讯精选练习之两数相加
两数相加
题目:
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:
1.定义一个带头结点的链表同时定义一个指针指向该结点
2.定义两个指针分别指向两个链表的头结点
3.定义一个int的进位标志c
4.循环遍历两个链表对应结点的值相加然后和10取余获取当前结点的值,做除法运算获取是否需要近卫,结果链表采用尾插法保证顺序
5.遍历结束后,判断最后一位相加的结果是否有进位,如果进位标志大于0说明有进位在插入一个进位结点
代码:
第一版:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode res(-1);
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* pRes = &res;
int c = 0;
while (p1 != NULL || p2 != NULL)
{
int pA = p1 == NULL ? 0 : p1->val;
int pB = p2 == NULL ? 0 : p2->val;
int tmp = pA + pB + c;
c = tmp / 10;
pRes->next = new ListNode(tmp % 10);
pRes = pRes->next;
p1 = p1 == NULL ? NULL : p1->next;
p2 = p2 == NULL ? NULL : p2->next;
}
if (c > 0)
{
pRes->next = new ListNode(c);
}
return res.next;
}
第二版:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode res(-1);
ListNode* pRes = &res;
int c = 0;
while (l1 != NULL || l2 != NULL)
{
int pA = l1 == NULL ? 0 : l1->val;
int pB = l2 == NULL ? 0 : l2->val;
int tmp = pA + pB + c;
c = tmp / 10;
pRes->next = new ListNode(tmp % 10);
pRes = pRes->next;
l1 = l1 == NULL ? NULL : l1->next;
l2 = l2 == NULL ? NULL : l2->next;
}
if (c > 0)
{
pRes->next = new ListNode(c);
}
return res.next;
}
终版:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode res(-1);
ListNode* pRes = &res;
int c = 0;
while (l1 != NULL || l2 != NULL)
{
int tmp = c;
if (l1 !=NULL)
{
tmp += l1->val;
l1 = l1->next;
}
if (l2 != NULL)
{
tmp += l2->val;
l2 = l2->next;
}
c = tmp / 10;
pRes->next = new ListNode(tmp % 10);
pRes = pRes->next;
}
if (c > 0)
{
pRes->next = new ListNode(c);
}
return res.next;
}
总结:
1.第一版就是按照思路一步一步完成的。
2.第二版去掉了临时变量,直接遍历两个链表,以减少内存开销
3.终版是去掉了两次重复的判断,以减少时间开销
4.结果的存储采用尾插法

leetcode腾讯精选练习之两数相加的更多相关文章
- leetcode 刷题(2)--- 两数相加
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- 【LeetCode】2. Add Two Numbers 两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- LeetCode 445. Add Two Numbers II (两数相加 II)
题目标签:Linked List 题目给了我们两个 数字的linked list,让我们把它们相加,返回一个新的linked list. 因为题目要求不能 reverse,可以把 两个list 的数字 ...
- [leetcode]445. Add Two Numbers II 两数相加II
You are given two non-empty linked lists representing two non-negative integers. The most significan ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
- LeetCode(2): 两数相加
本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- LeetCode 445——两数相加 II
1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...
- Leetcode 445. 两数相加 II
1.题目描述 给定两个非空链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. ...
随机推荐
- EL表达式中的empty和null
EL表达式中的empty和null 先说一下EL表达式中的null和empty区别,然后再说说最近在项目中出现的一个有趣的问题. EL中的null和empty都可用来判断值是否为空,但两者存在略微的区 ...
- SuperSocket AppServer 的两个事件: NewSessionConnected 和 SessionClosed
订阅事件: appServer.NewSessionConnected += new SessionHandler<AppSession>(appServer_NewSessionConn ...
- h5 的canvas绘制基本图形
文章地址:https://www.cnblogs.com/sandraryan/ canvas是一个标签,可用于绘制复杂图形,渲染效果比普通DOM快 某些低版本浏览器不支持 canvas 使用原生几乎 ...
- POJ 1961 Period 还是next数组的含义、
题意:求所给串的前缀(包括原串)中有多少循环串(子串长度至少要是周期的两倍) 思路:还是next数组的应用问题.如果不懂next数组的话 http://www.cnblogs.com/sasuke-/ ...
- 2018-2-13-win10-uwp-ContentDialog-点确定不关闭
title author date CreateTime categories win10 uwp ContentDialog 点确定不关闭 lindexi 2018-2-13 17:23:3 +08 ...
- springmvc 多文件/文件夹上传 下载
注入依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g ...
- hibernate中因双向依赖而造成的json怪相--springmvc项目
简单说一下Jackson 如果想要详细了解一下Jackson,可以去其github上的项目主页查看其版本情况以及各项功能.除此以外,需要格外提一下Jackson的版本问题.Jackson目前主流版本有 ...
- Python--day31--UDP协议的socket通信
- thinkPHP框架中执行原生SQL语句的方法
这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...
- Vue v-if和v-show的使用.区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...