首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LinkedList添加两个数字: LeetCode

问题描述: 给定两个非空的链表,表示两个非负的整数。链表中的每个节点都包含一个0-9的数字,数字按照逆序的方式存储,并且每个节点只能存储一位数字。将这两个链表相加,并且返回一个新的链表。

示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 解释:342 + 465 = 807

解答: 这个问题可以通过模拟加法的方式来解决。我们可以创建一个新的链表,然后从头开始遍历两个输入链表,将对应位置的数字相加,并且考虑进位。具体的步骤如下:

  1. 创建一个新的链表,用于存储相加的结果。
  2. 初始化两个指针,分别指向两个输入链表的头节点。
  3. 初始化一个进位变量carry,初始值为0。
  4. 遍历两个链表,直到两个链表都遍历完为止:
    • 获取当前节点的值,如果节点为空,则值为0。
    • 计算当前位置的和,即两个节点的值相加再加上进位。
    • 更新进位,如果和大于等于10,则进位为1,否则为0。
    • 创建一个新的节点,值为和对10取余的结果。
    • 将新节点添加到结果链表中。
    • 更新指针,将指针指向下一个节点。
  • 如果遍历完后,进位仍然为1,则需要在结果链表末尾添加一个值为1的节点。
  • 返回结果链表。

这个问题可以使用Java语言来实现,以下是一个示例代码:

代码语言:txt
复制
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode curr = dummy;
        int carry = 0;
        
        while (l1 != null || l2 != null) {
            int x = (l1 != null) ? l1.val : 0;
            int y = (l2 != null) ? l2.val : 0;
            int sum = carry + x + y;
            carry = sum / 10;
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            
            if (l1 != null) l1 = l1.next;
            if (l2 != null) l2 = l2.next;
        }
        
        if (carry > 0) {
            curr.next = new ListNode(carry);
        }
        
        return dummy.next;
    }
}

在这个解法中,我们使用了一个虚拟头节点(dummy)来简化代码。通过遍历两个输入链表,我们可以将对应位置的数字相加,并且考虑进位。最后,我们返回结果链表的下一个节点,即为最终的结果。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能机器学习平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动应用开发平台(MPS):https://cloud.tencent.com/product/mps
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯元宇宙(Tencent Metaverse):https://www.tencent.com/en-us/industries/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • LeetCode刷题——两个数组的交集和丢失的数字

    两个数组的交集 来源:力扣(LeetCode) 链接:力扣 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。...来源:力扣(LeetCode) 链接:力扣 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。...示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。...示例 2: 输入:nums = [0,1] 输出:2 解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。...8 是丢失的数字,因为它没有出现在 nums 中。 示例 4: 输入:nums = [0] 输出:1 解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。

    29930

    【每日一题】【leetcode】21. 序列-和为s的两个数字

    题目 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。...10,26,30,31,47,60], target = 40 输出:[10,30] 或者 [30,10] 限制: 1 <= nums.length <= 10^5 1 <= nums[i] <= 10^6 来源:力扣(LeetCode...) 链接:https://leetcode-cn.com/problems/he-wei-sde-liang-ge-shu-zi-lcof 著作权归领扣网络所有。...题解 分析 本题和《【leetcode】5. 数组-两数之和》列数,不同的地方是本题给出的数组是递增有序的。因此可以利用这条件来进行优化求解。 基本方法是利用双指针法,遍历求和。...设有两个指针(下标)int left = 0, right = nums.size() - 1; 循环求解um = nums[left] + nums[right]; 如果 sum == target

    20010
    领券