原题链接:#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; }
相关推荐
在JavaScript中,我们首先需要定义一个`ListNode`类,用于创建链表节点,并实现`addTwoNumbers`函数。在函数中,我们按照前面提到的步骤进行操作。注意,JavaScript中函数的灵活性允许我们在函数体内创建节点和进行...
C语言是一种广泛使用的计算机编程语言,以其结构化和高效的特性著称。...而针对leetCode的“Add Two Numbers(两数相加)”题目,不仅考察了对链表结构的理解和操作能力,还涉及了基本的算术运算和算法设计。
在众多题目中,“Add Two Numbers”是一个基础的链表操作题,它要求编写一个算法来模拟手工进行两个大数加法的过程。 在这道题中,你需要实现一个函数来处理两个非负整数的链表表示,这些整数以相反的顺序存储(即...
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
Add Two Numbers是一个经典的编程题目,通常出现在算法和数据结构的练习中,特别是在学习链表这一数据结构时。此题要求实现一个功能,即给定两个表示非负整数的链表,链表中的每个节点存储单个数字,并且数字按逆序...
Add Two Numbers**:给定两个非空链表表示两个非负整数,相加后返回结果链表。 - **141. Linked List Cycle**:判断链表是否有环,如有,找到环的入口节点。 - **19. Remove Nth From End**:移除链表中的第 n 个...
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”题解的要点涉及了几个关键的编程概念和算法。此问题要求我们实现一个函数,该函数输入两个用链表表示的数字,其中每个节点包含一个数字的单个位,并且这些数字是反向存储的...
2. **Add Two Numbers**(两数相加):此题要求实现一个功能,将两个非负整数表示的链表相加。每个节点包含一个数字,链表的顺序代表数字的位值。解题方法通常是迭代或递归地处理链表,同时考虑进位。教程提供了C++...
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”压缩包聚焦于LeetCode中的一道经典面试题——"两数相加"(Add Two Numbers)。这道题主要考察的是链表操作和基本的计算逻辑。 题目描述:给定两个非空...
判断链表是否为回文链表 leetcode leetCode-Exercise 个人 LeetCode 练习合集。 目前需要使用的数据结构 题解 Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
自己写的一个完整的程序,包括main函数,在VS上面提交通过,但是放到leetcode上面会出现问题;只是作为一个参考,一起学习学习0.o!解决的问题有:第一:两个链表的最后一个值相加后进位的问题;第二:两个链表的...
在实际应用中,我们通常会编写一些测试用例来验证函数的正确性,这可以通过创建模拟链表并调用`addTwoNumbers`函数来完成。在提供的`main.js`文件中,可能包含了此类测试用例。例如: ```javascript let l1 = new ...
- 链表结构常出现在各种与链表操作相关的题目中,如 AddTwoNumbers 题目要求对链表表示的两个数进行加法操作。 - 链表的逆序、排序、合并等操作也是常见的考察点。 6. **二分查找**: - 二分查找被广泛用于在...
"Leetcode-Answer-main" 文件可能是一个主目录,包含了不同问题的解决方案文件夹或文件,这些文件通常以问题的编号和简短描述命名,如 "001-two-sum" 或 "002-add-two-numbers"。 在解 LeetCode 题目时,开发者会...
- **2.2.1 Add Two Numbers** - 两个链表表示的大数相加。 - 实现思路:模拟加法过程,逐位相加并处理进位。 - **2.2.2 Reverse LinkedList II** - 反转链表的一部分。 - 实现思路:找到反转部分的起始和结束...
例如,如果你看到一个名为"2_addTwoNumbers.java"的文件,那么它很可能对应的是LeetCode上的第2题——“两数之和”。 这个项目的代码风格和实现方式是学习高质量Java编程的一个很好的资源。每个解决方案通常都是...
在描述中提到了"twoSum"和"addTwoNumbers",这两个都是LeetCode上的经典题目,主要涉及JavaScript编程语言。现在,我们将深入探讨这两个知识点: 1. **两数之和(twoSum)**: 这是LeetCode上的第一道题目,编号为1。...