`
Cwind
  • 浏览: 265489 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
793bb7df-a2a9-312d-8cb8-b66c3af482d1
LeetCode题解
浏览量:53540
社区版块
存档分类
最新评论

LeetCode[链表] - #2 Add Two Numbers

阅读更多

原题链接:#2 Add Two Numbers

 

要求:

给定两个以链表表示的非负整数,链表中的每个节点保存整数中的一位,以倒序排列(例如,321表示为1->2->3)。把这两个数字相加,作为一个链表返回。

 

输入:(2->4->3) + (5->6->4)

输出:7->0->8

 

难度:中等

 

分析:

本题思路比较直接,以两个指针分别遍历两个链表。值得注意的是需要进位的情况的处理。当两个指针指向的节点的值相加大于10时,设置进位标记,结果节点的值设为其和除以10取余。当一个链表遍历完成,则关注另一个链表剩余部分的进位情况即可。

 

解决方案:

Java - 504 ms

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }else if(l2==null){
            return l1;
        }
        ListNode result;
        ListNode cur;
        int curSum = l1.val + l2.val;
        boolean plusOne = false;
        if(curSum>9){
            curSum = curSum % 10;
            plusOne = true;
        }
        cur = new ListNode(curSum);
        result = cur;
        while (l1.next!=null&&l2.next!=null){
            l1 = l1.next;
            l2 = l2.next;

            if(plusOne){
                curSum = l1.val + l2.val + 1;
            }else {
                curSum = l1.val + l2.val;
            }
            if(curSum>9){
                curSum = curSum % 10;
                plusOne = true;
            }else {
                plusOne = false;
            }

            cur.next = new ListNode(curSum);
            cur = cur.next;
        }
        if(l1.next==null&&l2.next==null) {
            if(plusOne){
               cur.next = new ListNode(1);
            }
            return result;
        }else if(l1.next==null){
            while (l2.next!=null){
                l2 = l2.next;
                if(plusOne){
                    curSum = l2.val + 1;
                    if(curSum>9){
                        curSum = curSum %10;
                        plusOne = true;
                    }else {
                        plusOne = false;
                    }
                }else {
                    curSum = l2.val;
                    plusOne = false;
                }
                cur.next = new ListNode(curSum);
                cur = cur.next;
            }
        }else if(l2.next==null){
            while (l1.next!=null){
                l1 = l1.next;
                if(plusOne){
                    curSum = l1.val + 1;
                    if(curSum>9){
                        curSum = curSum%10;
                        plusOne = true;
                    }else {
                        plusOne = false;
                    }
                }else {
                    curSum = l1.val;
                    plusOne = false;
                }
                cur.next = new ListNode(curSum);
                cur = cur.next;
            }
        }
        if(plusOne){
            cur.next = new ListNode(1);
        }
        return result;
    }

 简单测试程序

分享到:
评论

相关推荐

    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

    leetcode-链表笔记

    Add Two Numbers**:给定两个非空链表表示两个非负整数,相加后返回结果链表。 - **141. Linked List Cycle**:判断链表是否有环,如有,找到环的入口节点。 - **19. Remove Nth From End**:移除链表中的第 n 个...

    python 教程 leetcode 代码模板-.Linked-List-Two-Pointers-List.md

    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: carry = 0 dummy = ListNode(0) curr = dummy while l1 or l2 or carry: if l1: carry += l1.val l1 = l1.next if l2: carry += l2.val...

    LeetCode 题解 - v1.01

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

    leetcode分类-leetcode:leetcode问题的代码

    leetcode 分类leetcode 问题分类 leetcode代码仓库,我的解题...#2:Add Two Numbers 分而治之 #53:Maximum Subarray 队列/集 #3:Longest Substring Without Repeating Characters 优先队列 #23:Merge k Sorted Lists

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

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

    判断链表是否为回文链表leetcode-LeetCode-Exercise:只是一个自我练习的leetcode合集

    判断链表是否为回文链表 leetcode leetCode-Exercise 个人 LeetCode 练习合集。 目前需要使用的数据结构 题解 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

    leetcode add two numbers

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

    js代码-leetCode--链表 两数相加

    在实际应用中,我们通常会编写一些测试用例来验证函数的正确性,这可以通过创建模拟链表并调用`addTwoNumbers`函数来完成。在提供的`main.js`文件中,可能包含了此类测试用例。例如: ```javascript let l1 = new ...

    leetcode-常见考题2.pdf

    - 链表结构常出现在各种与链表操作相关的题目中,如 AddTwoNumbers 题目要求对链表表示的两个数进行加法操作。 - 链表的逆序、排序、合并等操作也是常见的考察点。 6. **二分查找**: - 二分查找被广泛用于在...

    leetcode答案-Leetcode-Answer:Leetcode问题的代码

    "Leetcode-Answer-main" 文件可能是一个主目录,包含了不同问题的解决方案文件夹或文件,这些文件通常以问题的编号和简短描述命名,如 "001-two-sum" 或 "002-add-two-numbers"。 在解 LeetCode 题目时,开发者会...

    leetcode-cpp刷题

    - **2.2.1 Add Two Numbers** - 两个链表表示的大数相加。 - 实现思路:模拟加法过程,逐位相加并处理进位。 - **2.2.2 Reverse LinkedList II** - 反转链表的一部分。 - 实现思路:找到反转部分的起始和结束...

    leetcode题库-leetcode-java:用Java实现leetcode题库

    例如,如果你看到一个名为"2_addTwoNumbers.java"的文件,那么它很可能对应的是LeetCode上的第2题——“两数之和”。 这个项目的代码风格和实现方式是学习高质量Java编程的一个很好的资源。每个解决方案通常都是...

    leetcode答案-leetcode:javascript中leetcode测试的答案

    在描述中提到了"twoSum"和"addTwoNumbers",这两个都是LeetCode上的经典题目,主要涉及JavaScript编程语言。现在,我们将深入探讨这两个知识点: 1. **两数之和(twoSum)**: 这是LeetCode上的第一道题目,编号为1。...

    leetcode答案-leetcode:leetcode

    每个子文件夹内部则会有具体的题目编号和题目名称的代码文件,如“001_two_sum.py”或“002_add_two_numbers.java”。 在LeetCode上,每个问题都有其独特的ID,如001、002等,这些问题通常按照难度级别(简单、中等...

    leetcode-2(python).pdf

    def addTwoNumbers(self, l1, l2): if l1 is None: return l2 if l2 is None: return l1 pummy = ListNode(0) p = pummy carry = 0 while l1 and l2: p.next = ListNode((l1.val + l2.val + carry) % ...

    _leetcode-python.pdf

    - Add Two Numbers: 输入是两个非空的链表,表示两个非负整数,它们以相反的顺序存储。需要正确地相加这两个数,并以链表形式返回。 - Median of Two Sorted Arrays: 给定两个排序的数组,找到它们的中位数。解决这...

    LeetCode刷题笔记——#2. 两数相加

    难度:中等 一、题目描述: 二、解题分析:   根据题目这道题要注意两个点: 相加进位 两个链表长度不一定... def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: newNode=ListNode(0) ansNode

    addTwoNumbers_leetcode_

    非空 的链表,表示两个非负的整数。它们每位数字都是按照?逆序?的方式存储的,并且每个节点只能存储?一位?数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以...

Global site tag (gtag.js) - Google Analytics