167. Add Two Numbers【easy】
You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse
order, such that the 1's digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list.
Given 7->1->6 + 5->9->2
. That is, 617 + 295
.
Return 2->1->9
. That is 912
.
Given 3->1->5
and 5->9->2
, return 8->0->8
.
题意
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
解法一:
- /**
- * Definition for singly-linked list.
- * public class ListNode {
- * int val;
- * ListNode next;
- * ListNode(int x) {
- * val = x;
- * next = null;
- * }
- * }
- */
- public class Solution {
- public ListNode addLists(ListNode l1, ListNode l2) {
- if(l1 == null && l2 == null) {
- return null;
- }
- ListNode head = new ListNode(0);
- ListNode point = head;
- int carry = 0;
- while(l1 != null && l2!=null){
- int sum = carry + l1.val + l2.val;
- point.next = new ListNode(sum % 10);
- carry = sum / 10;
- l1 = l1.next;
- l2 = l2.next;
- point = point.next;
- }
- while(l1 != null) {
- int sum = carry + l1.val;
- point.next = new ListNode(sum % 10);
- carry = sum /10;
- l1 = l1.next;
- point = point.next;
- }
- while(l2 != null) {
- int sum = carry + l2.val;
- point.next = new ListNode(sum % 10);
- carry = sum /10;
- l2 = l2.next;
- point = point.next;
- }
- if (carry != 0) {
- point.next = new ListNode(carry);
- }
- return head.next;
- }
- }
中规中矩的解法
解法二:
- public class Solution {
- /**
- * @param l1: the first list
- * @param l2: the second list
- * @return: the sum list of l1 and l2
- */
- public ListNode addLists(ListNode l1, ListNode l2) {
- ListNode dummy = new ListNode(0);
- ListNode tail = dummy;
- int carry = 0;
- for (ListNode i = l1, j = l2; i != null || j != null; ) {
- int sum = carry;
- sum += (i != null) ? i.val : 0;
- sum += (j != null) ? j.val : 0;
- tail.next = new ListNode(sum % 10);
- tail = tail.next;
- carry = sum / 10;
- i = (i == null) ? i : i.next;
- j = (j == null) ? j : j.next;
- }
- if (carry != 0) {
- tail.next = new ListNode(carry);
- }
- return dummy.next;
- }
- }
比较简明的写法,且使用了dummy节点,参考@NineChapter 的代码
解法三:
- public class Solution {
- /*
- * @param l1: the first list
- * @param l2: the second list
- * @return: the sum list of l1 and l2
- */
- public ListNode addLists(ListNode l1, ListNode l2) {
- ListNode root = new ListNode(-1);
- ListNode result = root;
- int carry = 0;
- while( l1 != null || l2 != null || carry == 1){
- int value = 0;
- if(l1 != null){
- value += l1.val;
- l1 = l1.next;
- }
- if( l2 != null){
- value += l2.val;
- l2 = l2.next;
- }
- value += carry;
- root.next = new ListNode(value % 10);
- carry = value / 10;
- root = root.next;
- }
- return result.next;
- }
- }
解法四:
- class Solution {
- public:
- ListNode* addLists(ListNode* l1, ListNode* l2) {
- ListNode *head = new ListNode();
- ListNode *ptr = head;
- int carry = ;
- while (true) {
- if (l1 != NULL) {
- carry += l1->val;
- l1 = l1->next;
- }
- if (l2 != NULL) {
- carry += l2->val;
- l2 = l2->next;
- }
- ptr->val = carry % ;
- carry /= ;
- // 当两个表非空或者仍有进位时需要继续运算,否则退出循环
- if (l1 != NULL || l2 != NULL || carry != ) {
- ptr = (ptr->next = new ListNode());
- } else {
- break;
- }
- }
- return head;
- }
- };
非常简明的代码,参考@NineChapter 的代码
167. Add Two Numbers【easy】的更多相关文章
- 2. Add Two Numbers【medium】
2. Add Two Numbers[medium] You are given two non-empty linked lists representing two non-negative in ...
- 167. Add Two Numbers【LintCode by java】
Description You have two numbers represented by a linked list, where each node contains a single dig ...
- 633. Sum of Square Numbers【Easy】【双指针-是否存在两个数的平方和等于给定目标值】
Given a non-negative integer c, your task is to decide whether there're two integers a and bsuch tha ...
- 167. Two Sum II - Input array is sorted【easy】
167. Two Sum II - Input array is sorted[easy] Given an array of integers that is already sorted in a ...
- 448. Find All Numbers Disappeared in an Array【easy】
448. Find All Numbers Disappeared in an Array[easy] Given an array of integers where 1 ≤ a[i] ≤ n (n ...
- 1. Two Sum【easy】
1. Two Sum[easy] Given an array of integers, return indices of the two numbers such that they add up ...
- 170. Two Sum III - Data structure design【easy】
170. Two Sum III - Data structure design[easy] Design and implement a TwoSum class. It should suppor ...
- 121. Best Time to Buy and Sell Stock【easy】
121. Best Time to Buy and Sell Stock[easy] Say you have an array for which the ith element is the pr ...
- 88. Merge Sorted Array【easy】
88. Merge Sorted Array[easy] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 ...
随机推荐
- [Android Pro] android 杀死进程的方法
1: 杀死自己进程的方法 android.os.Process.killProcess(Process.myPid()); 2:杀死别人进程的方法(不能杀死自己) -------a: activity ...
- vc预处理
VC 编译命令开关 vc可以可以通过Settings -->Project-->C/C++-->Customize来设置这个编译开关 /C:在预处理输出中保留注释语句 /c:只编译, ...
- 用指令来构建IIS7
工作上要部署iis7+net4.0环境,发现30多台机子都没有用装有IIS7镜像来安装,都必须自己手动. 作为程序猿,真要一台台装的话,就真对不起自己的职业.于是想到用bat来执行任务,找到了安装II ...
- Qt 维护工具MaintenanceTool.exe 使用
QT如何管理组件(解决“要继续此操作,至少需要一个有效且已启用的储存库”问题) 转载2017-10-26 01:48:46 标签:qt QT的组件管理软件并没有在开始菜单或者桌面添加快捷方式(5.9版 ...
- 《java 语言程序设计》第2章编程练习
2.1 public class test { public static void main(String[] args) { Scanner input = new Scanner(System. ...
- phpstorm failed to create jvm:error code -6 解决办法 解决方法
phpStorm 软件打开运行提示 failed to create JVM的解决办法. 修改文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\bi ...
- [NPM] Avoid Duplicate Commands by Calling one NPM Script from Another
We can get a lot of utility through CLI tools invoked via npm scripts. Many of these tools have APIs ...
- 让Android App启动更协调
不知道大伙有没有发现,应用第一次启动的时候一般比较慢(低配置手机尤其如此),黑屏好一段时间,下面是我在模拟器中启动QQ的截图,黑屏差不多有5秒左右,如下图所示~ 显然这种结果很糟 ...
- keytool命令总结
keytool 命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(目录是c: Documents and Setting用户名)和算法(DSA) keytool -genkey ...
- 机器学习数学基础- gradient descent算法(上)
为什么要了解点数学基础 学习大数据分布式计算时多少会涉及到机器学习的算法,所以理解一些机器学习基础,有助于理解大数据分布式计算系统(比如spark)的设计.机器学习中一个常见的就是gradient d ...