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
思路:遍历链表即可。
需要注意的两点:
1) 相加到10之后会进位,需要保留这个进位
2) 如果是最后一位加完还有进位,那么会再新建一个节点
程序如下:
public class LinkedListAddition { public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(0); ListNode head = l3; if(l1==null){ return l2; } if(l2==null){ return l1; } int val = 0; int advance = 0; while(l1!=null && l2!=null){ val = l1.val + l2.val + advance; if(val >= 10){ val =val - 10; advance = 1; }else{ advance = 0; } ListNode node = new ListNode(val); node.next = null; l3.next = node; l3 = l3.next; l1 = l1.next; l2 = l2.next; } if(l1 == null && l2 == null && advance == 1){ ListNode last = new ListNode(advance); last.next = null; l3.next = last; } if(l1 !=null){ l3.next = l1; addAdvance(l1,advance); }else if (l2 != null){ l3.next = l2; addAdvance(l2,advance); } return head.next; } public static void addAdvance(ListNode l,int advance){ if(l == null){ return; } ListNode pre = l; while(l != null){ l.val = l.val + advance; if(l.val >=10){ l.val = l.val - 10; }else{ advance = 0; } pre = l; l = l.next; } if(advance == 1){ ListNode last = new ListNode(advance); last.next = null; pre.next = last; } } static class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } }
相关推荐
两个数字相加 + 链表 回文链表 ——! :star: 链表 两个链表的交集 —— 链表 链表循环 + :star: :star: 细绳 最长有效括号 —— :star: :star: :star: 数组、堆栈 截留雨水 —— :star: :star: :star: 堆 有效括号 ...
将两个数字相加并将其作为链表返回。 您可以假设这两个数字不包含任何前导零,除了数字 0 本身。 例子: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 解决方案 一次...
problem 难度 使用语言 思路 提交次数 WA点 star 1 两数之和 简单 C++ 2 两数相加 中等 Java 3 无重复字符的最长子串 中等 Java 5 最长回文子串 中等 python 7 整数反转 简单 python 8 字符串转换整数(atoi) 中等 ...
例如,"两数之和"(Two Sum)是经典的数组问题,要求找到数组中使得它们相加等于特定目标值的两个元素的索引。 2. **链表**:链表问题涉及节点的插入、删除、反转、合并等操作。例如,"两链表的交点"(Intersection...
例如,"两数相加"(Add Two Numbers)问题,需要将两个链表表示的数字相加。 3. **字符串(String)**:字符串处理涉及模式匹配、反转、子串查找等。例如,"无重复字符的最长子串"(Longest Substring Without ...
首先,LeetCode上的问题主要分为几种类型:数组、链表、栈、队列、哈希表、二叉树、回溯、动态规划、位操作、图算法等。这些题目涵盖了计算机科学的基础算法和数据结构,是软件工程师面试和日常工作中经常会遇到的...
例如,"两数之和"(Two Sum)问题,可以通过哈希表在O(n)的时间复杂度内找到两个数相加等于目标值的元素。 2. **字符串**:字符串问题则涉及模式匹配、子串查找和字符串操作。比如,"无重复字符的最长子串"...
在LeetCode中,链表问题经常出现,如两数相加、删除中间节点、反转链表等。 2. **算法(Algorithms)**:这是一门广泛的学科,包括排序、搜索、图论、动态规划等。LeetCode中的问题通常要求应用这些算法来解决特定...
Problem Article Animation Date 000 十大经典排序算法 001 两数之和 002 两个数字相加 003 无重复字符的最长子串 019 删除链表的倒数第N个节点 020 有效的括号 024 两两交换链表中的节点 026 删除排序数组中的重复...
在编程领域,LeetCode 是一个非常著名的在线平台,它提供了大量的算法题目,旨在帮助程序员提升技能,准备面试,...对于LeetCode-problem-master这个压缩包,可能是包含了这三个问题的解题代码,供学习者参考和学习。
Problem Article Animation 000 十大经典排序算法 001 两数之和 002 两个数字相加 003 无重复字符的最长子串 019 删除链表的倒数第N个节点 020 有效的括号 024 两两交换链表中的节点 026 删除排序数组中的重复项 075...
lru缓存leetcode 力码解决方案 问题在 最大和子数组 买卖股票以获得最大利润 排序数组到 BST 产品以外的自我 平衡二叉树 树是否对称 从中序和预序遍历构造树 二叉树的 LCA(不一定是 BST) 填充树的下一个右指针 根...
两数相加 Add Two Numbers Medium 19 删除链表倒数第N个节点 Remove Nth Node From End of List Medium 21 合并两个有序链表 Merge Two Sorted Lists Easy 141 判断链表是是否存在环 Linked List Cycle Easy 142 ...
删除链表的倒数第 N 个结点 - LeetCode) 在链表问题中,双指针经常被用来找到链表的特定节点。在这个问题中,一个指针先移动N步,然后两个指针一起移动,当先移动的指针到达链表尾部时,另一个指针就指向了倒数第N...
对于“添加两个数字”这样的搜索“problem_2”和“src/com/kunal/leetcode”中的解决方案 到现在解决的问题 两个数字相加无重复字符的最长子串最长回文子串字符串到整数 (atoi) 盛水最多的容器电话号码的字母组合从...
JavaScript支持数组、对象、链表、栈、队列等多种数据结构,同时,我们还需要掌握基本的算法,如排序(冒泡、选择、插入、快速、归并等)、查找(线性、二分)、递归等。 三、JavaScript的数学运算 Project Euler...
8. 链表(Linked Lists):如两数相加、删除中间节点等,处理链式存储的数据结构。 9. 哈希表(Hash Tables):用于快速查找和去重,例如计算数组中的重复元素。 在练习BaekJoon问题时,开发者会遇到不同难度级别的...