leetcode题解2. Add Two Numbers
题目:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807. 首先先来分析一下题目
这个题目我的思路就是把这两个链表都转换成数字,然后相加,再将获得的和进行转化,转化为我们需要的链表结果。
看起来是个很完美的想法,不过很久没写代码还是发现了一些问题。
没有在IDE上写直接在leetcode上写报错了,
Line 20: request for member 'val' in 'l1', which is of pointer type 'ListNode*' (maybe you meant to use '->' ?报了这个错误,还是对结构体和指针的研究不够深入不知道什么时候用->什么时候用.
百度上搜到一个不错的答案:
->是指针指向其成员的运算符
.是结构体的成员运算符。
最大的区别是->前面放的是指针,而.前面跟的是结构体变量。
例如:struct
A
{
int
a;
int
b;
};
A *point =
malloc
(
sizeof
(
struct
A));
point->a = 1;
A object;
object.a = 1;
然后附上我这个思路的代码:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
long long num1=0;
long long num2=0;
long long k=1;
long long ans=0;
ListNode* l3;
ListNode* temp;
while(true)
{
num1=(l1->val)*k+num1;
k=k*10;
if(l1->next==NULL) break;
l1=l1->next;
}
k=1;
while(true)
{
num2=l2->val*k+num2;
k=k*10;
if(l2->next==NULL) break;
l2=l2->next;
}
ans=num1+num2;
temp=new ListNode(0);
l3=temp;
while(true)
{
temp->val=ans%10;
ans=ans/10;
if(ans==0) break;
temp->next=new ListNode(0);
temp=temp->next;
}
return l3;
}
};
这个方法并不能完全过数据,显然我忽略了一种样本数据很长的情况,从int换成long long也装不下这么多的数据。
所以需要换一个方法。
看了一下网上的和官方的解答思路,也就是需要将同一位的两个node里面的值加起来
当然也要考虑进位的问题,进位方面还有比较重要的就是如果最高位不够的情况要新增一个结点来存放最高位的1。
现在就展示一下后来的正确解法的代码部分:
/**
* 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* l3=new ListNode(0);
ListNode* temp=l3;
int carry=0;
while(l1!=NULL||l2!=NULL)
{
int n1=0;
int n2=0;
if(l1!=NULL) n1=l1->val;
else n1=0;
if(l2!=NULL) n2=l2->val;
else n2=0;
int n3=n1+n2+carry; //sum is num1 and num2 and carry!
carry=n3/10;
n3=n3%10;
if(temp!=NULL)
{
temp->next=new ListNode(n3);
}
temp=temp->next;
if(l1!=NULL) l1=l1->next;
if(l2!=NULL) l2=l2->next;
}
if(carry!=0)
{
temp->next=new ListNode(carry);
}
return l3->next;
}
};
这道题也让我复习了一下链表,学会很好的使用链表是很必要的
学习建立一个简单的链表
struct ListNode{
int val;
ListNode *next;
ListNode(int x) :val(x),next(NULL){}
};
leetcode题解2. Add Two Numbers的更多相关文章
- 《LeetBook》LeetCode题解(2):Add Two Numbers [M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- LeetCode题解 #2 Add Two Numbers
题目大意:使用链表表示的两个整数,计算出其和,以同样的形式返回. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 ...
- LeetCode 题解之Add Two Numbers II
1.题目描述 2.分析 首先将链表翻转,然后做加法. 最后将结果链表翻转. 3.代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Lis ...
- LeetCode题解之Add two numbers
1.题目描述 2.题目描述 题目思路可以参考合并单链表的思路,定义一个全局 进位标志,如果两个数值相加得到需要进位,则将进位标志置为1 . 3.代码 ListNode* addTwoNumbers(L ...
- leetcode 第二题Add Two Numbers java
链接:http://leetcode.com/onlinejudge Add Two Numbers You are given two linked lists representing two n ...
- 【LeetCode】445. Add Two Numbers II 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和再构成列表 使用栈保存节点数字 类似题目 日期 ...
- C# 写 LeetCode Medium #2 Add Two Numbers
2. Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. ...
- LeetCode 第二题 Add Two Numbers 大整数加法 高精度加法 链表
题意 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, return mul ...
随机推荐
- JZ2440使用笔记之熟悉uboot和Linux的移植
目录 一.点亮开发板:移植uboot.Linux内核.文件系统 1.1 配置上位机交叉编译环境 1.2 制作U-boot镜像文件 1.3 通过oflash.exe / openJTAG 烧写u-boo ...
- flutter控件之ExpansionPanelList
import 'package:flutter/material.dart'; class LearnExpansionPanelList extends StatefulWidget{ @overr ...
- MySQL5.7 编译安装
准备 yum install cmake yum install -y bison yum install -y libaio-devel yum install -y boost 下载 percon ...
- nginx ssl 卸载功能 第八章
一 .证书自签发和给web 服务签发证书 .ssl 证书加密文件 ****************************** 建立私有CA openCA openssl 证书申请及签署步骤 .生成证 ...
- Python新手入门英文词汇笔记(1-2)
英文词汇总结一.循环1.for…in…循环的使用2.while…循环的使用本节英文单词与中文释义:1.for:因为2.while:当…时…3.range:范围4.sep(separate):分隔5.f ...
- WebApi实现验证授权Token,WebApi生成文档等(转)
using System; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Security; ...
- OceanBase 2.0让百万支付不是梦?
小蚂蚁说: 你们都很关心的 “OB双11大促实战分享” 专题来啦!本系列将为你系统性的介绍OceanBase支撑蚂蚁双11背后的技术原理和实战分享.从平台到架构,再到实现,一起来探索蚂蚁双11这场神秘 ...
- (转)决定系数R2
有些讲得太烂了,我来通俗的梳理一下R2. Calculating R-squared 在线性回归的模型下,我们可以计算SE(line), SE(y均值). The statistic R2descri ...
- 2019ExcelVBA一些自己掉进过的坑
1.公式手动重算问题 为避免代码执行过程中引发公式自动重算,拖慢运行速度,在代码中设置了公式手动重算,并计划在代码执行结束前恢复.如果在代码执行过程中捕获错误就直接退出,而没有执行到恢复公式自动重算, ...
- jRazor
引擎渲染速度竞赛 条数据 × 次渲染测试 建议在高版本的浏览器上进行测试,避免浏览器停止响应 测试环境: 开始测试»