【002-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

题目大意

  有两个单链表。代表两个非负数,每个节点代表一个数位。数字是反向存储的。即第一个结点表示最低位。最后一个结点表示最高位。求两个数的相加和,而且以链表形式返回。

解题思路

  对两个链表都从第一个開始处理,进行相加,结果再除以10求商。作为下一位相加的进位。同一时候记录余数,作为本位的结果,一直处理,直到全部的结点都处理完。

代码实现

 /**
* 002-Add Two Numbers (单链表表示的两个数相加)
* @param l1 第一个数
* @param l2 第二个数
* @return 结果
*/
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if (l1 == null) {
return l2;
} if (l2 == null) {
return l1;
} ListNode p1 = l1;
ListNode p2 = l2;
ListNode root = new ListNode(0); // 头结点
ListNode r = root;
root.next = l1; int carry = 0; // 初始进位
int sum;
while (p1 != null && p2 != null) {
sum = p1.val + p2.val + carry;
p1.val = sum % 10; // 本位的结果
carry = sum / 10; // 本次进位 r.next = p1;
r = p1; // 指向最后一个相加的结点
p1 = p1.next;
p2 = p2.next; } if (p1 == null) {
r.next = p2;
} else {
r.next = p1;
} // 最后一次相加还有进位
if (carry == 1) {
// 開始时r.next是第一个要相加的结点
while (r.next != null) {
sum = r.next.val + carry;
r.next.val = sum % 10;
carry = sum / 10;
r = r.next;
} // 都加完了还有进位。就要创建一个新的结点
if (carry == 1) {
r.next = new ListNode(1);
}
} return root.next;
}
}

评測结果

  点击图片,鼠标不释放,拖动一段位置,释放后在新的窗体中查看完整图片。

特别说明

欢迎转载,转载请注明出处【http://blog.csdn.net/DERRANTCM/article/details/46905467

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】的更多相关文章

  1. LeetCode 2. add two numbers && 单链表

    add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...

  2. 【LeetCode-面试算法经典-Java实现】【139-Word Break(单词拆分)】

    [139-Word Break(单词拆分)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a string s and a dictionary of w ...

  3. 【LeetCode-面试算法经典-Java实现】【015-3 Sum(三个数的和)】

    [015-3 Sum(三个数的和)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given an array S of n integers, are there ...

  4. 【LeetCode-面试算法经典-Java实现】【030-Substring with Concatenation of All Words(串联全部单词的子串)】

    [030-Substring with Concatenation of All Words(串联全部单词的子串)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Yo ...

  5. 【LeetCode-面试算法经典-Java实现】【118-Pascal's Triangle(帕斯卡三角形)】

    [118-Pascal's Triangle(帕斯卡三角形(杨辉三角))] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given numRows, generate ...

  6. 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】

    [056-Merge Intervals(区间合并)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a collection of intervals, ...

  7. 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】

    [145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...

  8. 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】

    [057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...

  9. 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】

    [144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...

随机推荐

  1. Selenium WebDriver- 操作JavaScript的prompt弹窗(使用率低)

    #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...

  2. Linux 安装 tree命令

    通过yum在线安装tree包 yum install tree -y

  3. Nginx从入门到放弃-第4章 深度学习篇

    4-1 Nginx动静分离_动静分离场景演示 4-2 Nginx动静分离_动静分离场景演示1 4-3 Nginx的动静分离_动静分离场景演示2 4-4 Rewrite规则_rewrite规则的作用 4 ...

  4. Python学习-day9 线程

    这节内容主要是关于线程的学习 首先要了解的什么是进程,什么是线程 进程与线程 什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称 ...

  5. php处理文件和操作系统

    一.文件和目录 (1).解析目录路径:basename()返回路径的文件名部分 获取路径目录:dirname() 返回除了文件名的路径部分 了解关于路径的更多信息:pathinfo()   返回关联数 ...

  6. django自定义过滤器和标签

    1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...

  7. 将json的文本文件转换为csv文件

    import pandas as pd import fire import glob import json def text_to_csv(file_name): json_data = json ...

  8. pycharm配置 自动运行指定脚本

    配置:RUN -Debug Configuration Script: 脚本的地址 Script Parameters: 脚本的参数 Interpreter: python解释器

  9. 为什么在header 和 session 之前不能有输出

    1.在header输出之前有输出内容的话,就会造成对header的错误理解(尽管现在已经能容错了),例如不是满足“keyword: value\n”的格式还好,直接错误了,但是满足“keyword: ...

  10. Jeddict1:简述

    备注:本文是一篇翻译文,文章所有的内容(排除目录)均来自于:https://jeddict.github.io/ ,但为了自己的理解,进行了目录分类! 一.什么是Jeddict jeddict是一个开 ...