`

LeetCode 2 - 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

 

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    int carry = 0;
    ListNode dummy = new ListNode(0);
    ListNode node = dummy;
    while(l1 != null || l2 != null) {
        int v1 = 0, v2 = 0;
        if(l1!=null) {
            v1 = l1.val;
            l1 = l1.next;
        }
        if(l2!=null) {
            v2 = l2.val;
            l2 = l2.next;
        }
        int sum = carry+v1+v2;
        carry = sum / 10;
        node.next = new ListNode(sum%10);
        node = node.next;
    }
    if(carry != 0) {
        node.next = new ListNode(carry);
    }
    return dummy.next;
}

 

但是如果高位存在链表头部,低为存在链表尾部,该怎么办呢?

两种办法。

方法1:将两个链表反转,用上面方法加和,然后再把结果反转一下就可以了。

方法2:计算出两个链表的长度,假设链表l1的长度为len1,链表l2的长度为len2,且len1>=len2。递归的加低位的数字。

private int carry;
public ListNode addNumber(ListNode l1, ListNode l2) {
	carry = 0;
	int len1 = length(l1), len2 = length(l2);
	ListNode node;
	if(len1 > len2) {
		node = addNumber(l1, l2, len1, len2);
	} else {
		node = addNumber(l2, l1, len2, len1);
	}
	if(carry == 0) return node;
	ListNode head = new ListNode(carry);
	head.next = node;
	return head;
}

private ListNode addNumber(ListNode l1, ListNode l2, int len1, int len2) {
	if(l1 == null) return null;
	ListNode next = addNumber(l1.next, len1 == len2 ? l2.next : l2, 
							  len1-1, len1 == len2 ? len2-1 : len2);
	int sum = l1.val+carry;
	if(len1==len2) {
		sum += l2.val;
		len2--;
	} 
	len1--;
	carry = sum / 10;
	ListNode head = new ListNode(sum%10);
	head.next = next;
	return head;
}

private int length(ListNode head) {
	int len = 0;
	while(head != null) {
		len++;
		head = head.next;
	}
	return len;
}

 

 

分享到:
评论

相关推荐

    c语言-leetcode 0002-add-two-numbers.zip

    c c语言_leetcode 0002_add_two_numbers.zip

    LeetCode2 Add Two Numbers

    You are given two non-empty linked lists ... 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. java AC版本

    js-leetcode题解之-add-two-numbers.js

    在JavaScript中,我们首先需要定义一个`ListNode`类,用于创建链表节点,并实现`addTwoNumbers`函数。在函数中,我们按照前面提到的步骤进行操作。注意,JavaScript中函数的灵活性允许我们在函数体内创建节点和进行...

    c语言-leetcode题解02-add-two-numbers.c

    C语言是一种广泛使用的计算机编程语言,以其结构化和高效的特性著称。...而针对leetCode的“Add Two Numbers(两数相加)”题目,不仅考察了对链表结构的理解和操作能力,还涉及了基本的算术运算和算法设计。

    java-leetcode 题解之 Add Two Numbers II.java

    Java实现LeetCode中“Add Two Numbers II”题解的要点涉及了几个关键的编程概念和算法。此问题要求我们实现一个函数,该函数输入两个用链表表示的数字,其中每个节点包含一个数字的单个位,并且这些数字是反向存储的...

    java-leetcode题解之002-Add-Two-Numbers

    java入门 java_leetcode题解之002_Add_Two_Numbers

    leetcode接口-leetcodeHelper:leetcodeHelper

    leetcode 接口 该项目可帮助您使用首选的 IDE 或带有命令行界面 (CLI) 的编辑器来执行 leetcode。 ...add-two-numbers leetcode --name median-of-two-sorted-arrays 然后问题描述和启动代码将自动

    leetcode2sumc-2021-LeetCode-02_Add_Two_Numbers:2021-LeetCode-02_Add_Two

    leetcode 2 和 c 2021-LeetCode-02_Add_...addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { guard l1 != nil && l2 != nil else { return nil } var resultTail = ListNode() let resultHead = resu

    java-leetcode java题解之Add Two Numbers.java

    Add Two Numbers是一个经典的编程题目,通常出现在算法和数据结构的练习中,特别是在学习链表这一数据结构时。此题要求实现一个功能,即给定两个表示非负整数的链表,链表中的每个节点存储单个数字,并且数字按逆序...

    leetcodepython001-leetcode-problems-crawler:leetcode-问题-爬虫

    leetcode Python 001 leetcode-问题-爬虫 ...002.add-two-numbers │  ├── information.json │  ├── README.md ... 有一些有用的选项: Options: -r, --rule crawling rule, eg1: 1-10, e

    LeetCode 题解 - v1.01

    2. **Add Two Numbers**(两数相加):此题要求实现一个功能,将两个非负整数表示的链表相加。每个节点包含一个数字,链表的顺序代表数字的位值。解题方法通常是迭代或递归地处理链表,同时考虑进位。教程提供了C++...

    leetcode2sumc-add-two-numbers-solution:我的LeetCodeC解决方案:添加两个数字

    Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Example 1: Input: l1 = [2,4,3], l2 = [5,6,4] Output...

    add-two-numbers

    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. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 ...

    leetcode题库-leetcode-web:以Web形式展示LeetCode题解,基于PythonFlask

    leetcode题库 LeetCode-Web 初始化 前端库依赖 下载,并将jquery-3.x.x.min.js移动到static目录下。...add-two-numbers 3 Longest Substring Without Repeating Characters longest-substring-without-repeating-charac

    leetcode add two numbers

    自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;只是作为一个参考,一起学习学习0.o!解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的...

    leetcode下载-GLPL:为LeetCode的问题集生成目录导航列表

    :[题目描述](https://leetcode-cn.com/problems/add-two-numbers),[解答](https://leetcode-cn.com/problems/add-two-numbers/solution/) 因为暂时只找到英文版的json数据,故现有格式为: - [ ] 0001.Two Sum:...

    python-leetcode面试题解之两数相加AddTwoNumbers.zip

    这个“python-leetcode面试题解之两数相加AddTwoNumbers.zip”压缩包聚焦于LeetCode中的一道经典面试题——"两数相加"(Add Two Numbers)。这道题主要考察的是链表操作和基本的计算逻辑。 题目描述:给定两个非空...

    leetcode卡-LeetCode:我的LeetCode解决方案

    2. Add Two Numbers], Linked list 2017.06.13 打卡[LeetCode 200. Number of Islands], BFS 2017.06.14 打卡[LeetCode 3. Longest Substring Without Repeating Characters], N/A 2017.06.15 打卡[LeetCode 407. ...

    leetcode答案-SH_LeetCode:LeetCode-Swift

    更新:添加README文件以及LeetCode前三题代码(Add README.md and Code for the first three questions) 1. 两数之和(Two Sum) 2. 两数相加(Add Two Numbers) 3. 无重复字符的最长子串(Longest Substring ...

    leetcode2-Leetcode:Leetcode_answer

    Numbers JavaScript O(n) O(1) Medium 4 Median of Two Sorted Arrays JavaScript O(log (m+n)) O(1) Hard 7 Reverse Integer JavaScript O(n) O(1) Easy 9 Palindrome Number JavaScript O(n) O(1) Easy 19 Remove ...

Global site tag (gtag.js) - Google Analytics