[Leetcode] Add two numbers 两数之和
You are given two linked lists representing two non-negative numbers. 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题意:求以链表形式表示的两非负整数之和,高位在后。
思路:联想数组形式的计算,以一个变量carry为对应位置的和,carry%10为当前值,carry/10为进位。在数组里,直接在长度较大的数组更新值就行,但是链表的长度没法直接获得。所以出现了问题一:如何保存数据。所以针对这个问题有两种解法,但求和的思想还是不变。问题二、若是最高位有进位,怎么办?这种情况下,只能新建一个结点,然后赋值。
方法一:开辟一个新的链表,每次都是将对应的值赋给新开辟的结点。这就遇到循环条件的问题,若是l1&&l2则会遇到有其中一个链表遍历完时,剩下的链表的进位情况,若剩下的结点值全是9,即存在进位的可能则可能有需要另一个while循环,所以这里为代码的简洁还是用 l1||l2 。还有一点值得注意的是,对当前结点的取值一定要在当前结点存在的情况下,不然会造成错误。代码如下:
- /**
- * 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)
- {
- if(l1==NULL) return l2;
- if(l2==NULL) return l1;
- int carry=;
- ListNode *nList=new ListNode(-);
- ListNode *pre=nList;
- while(l1||l2)
- {
- if(l1)
- {
- carry+=l1->val;
- l1=l1->next;
- }
- if(l2)
- {
- carry+=l2->val;
- l2=l2->next;
- }
- pre->next=new ListNode(carry%);
- carry/=;
- pre=pre->next;
- }
- if(carry==)
- pre->next=new ListNode();
- return nList->next;
- }
- };
方法二:参考数组的做法,先找出较长的,然后更新较长链表上结点的值。参考LeetCode上的讨论。
- /**
- * 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)
- {
- int flag=;
- int sum=;
- ListNode *pointer1=l1;
- ListNode *pointer2=l2;
- ListNode *result=NULL;
- while(pointer1&&pointer2)
- {
- pointer1=pointer1->next;
- pointer2=pointer2->next;
- }
- if(pointer1==NULL)
- result=l2;
- else
- result=l1;
- ListNode *nList=result;
- while(l1||l2)
- {
- sum=(l1?l1->val:)+(l2?l2->val:)+flag;
- flag=sum/;
- result->val=sum%;
- l1?l1=l1->next:l1;
- l2?l2=l2->next:l2;
- result->next?result=result->next:result; //值得注意必须先判断存在,
- } //思考,若存在进位,和下面的代码会产生什么后果
- if(flag==)
- {
- result->next=new ListNode();
- }
- return nList;
- }
- };
[Leetcode] Add two numbers 两数之和的更多相关文章
- Leetcode:0002(两数之和)
LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两 ...
- Leetcode(1)两数之和
Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...
- [LeetCode] 1. Two Sum 两数之和
Part 1. 题目描述 (easy) Given an array of integers, return indices of the two numbers such that they add ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode Golang实现 1. 两数之和
1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- Leetcode(一)两数之和
1.两数之和 题目要求: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重 ...
- leetcode每日一题——两数之和
题目: 两数之和 难度: 简单 描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 解法: class Solutio ...
- LeetCode刷题 - (01)两数之和
题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- LeetCode题解001:两数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
随机推荐
- Linux 内核之api_man 手册安装
开发环境:Ubuntu18.04,虚拟机virtual box 1.安装XML格式转换 sudo apt install xmlto 2.在内核目录执行 make mandocs 大概持续了半小时 ...
- [转]Makefile中使用$$的使用
在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢,区别大了.不要认为在makefile的规则的命令行中使用$var就是将makefile的变量和s ...
- java时间"yyyy-mm-dd HH:mm:ss"转成Date
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time="1 ...
- Python自动化运维——文件与目录差异对比
Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:filecmp 安装:Python版本大于等于2.3默认自带 功能:实现文件.目录.遍历子目录的差异 常用方 ...
- go学习笔记-变量作用域
变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. 变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式 ...
- 使用 -命令行-给-python-安装whl文件,
whl文件下载到哪个位置,命令行就切入到哪里: 我的在D盘目录下,所以命令行切进D盘(CD):方式如下: 列出<用户目录>下的目录(dir): 因为我安装了2个版本的python所以给py ...
- Yearning和inception搭建MySQL审核平台
前言 采用开源Yearning和inception开源软件,搭建用于MYSQL审核及线上MYSQL语句更新的审核平台. 功能说明 Yearning: 基于Vue.js与Django的整套mysql-s ...
- Ubuntu server中 samba的安装和简单配置
samba是Linux系统上的一种文件共享协议,可以实现Windows系统访问Linux系统上的共享资源,现在介绍一下如何在Ubuntu 14.04上安装和配置samba 工具/原料 Ubuntu ...
- [bzoj5158][Tjoi2014]Alice and Bob
好羞愧啊最近一直在刷水... 题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大. 其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为 ...
- goroutine 并发之搜索文件内容
golang并发编程 - 例子解析 February 26, 2013 最近在看<Programming in Go>, 其中关于并发编程写得很不错, 受益非浅, 其中有一些例子是需要多思 ...