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

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;
    }

 简单测试程序

分享到:
评论

相关推荐

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

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

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

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

    C++-leetcode题解之002. Add Two Numbers.cpp

    在众多题目中,“Add Two Numbers”是一个基础的链表操作题,它要求编写一个算法来模拟手工进行两个大数加法的过程。 在这道题中,你需要实现一个函数来处理两个非负整数的链表表示,这些整数以相反的顺序存储(即...

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

    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...

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

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

    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。...

Global site tag (gtag.js) - Google Analytics