leetcode-2 两数相加(AddTwoNumbers)-java

本文介绍了一种解决两个大数相加问题的方法,通过使用链表存储整数的每位数字,实现逆序存储,从而简化了计算过程。文章详细阐述了如何处理不同长度链表的相加操作,并给出了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

给定两个链表分别代表两个非负整数,链表的每个结点分别存储整数的每位数字,且是逆序存储,即:数字最低位存储在链表表头,数字最高位存储在链表表尾。求解这两个整数的和并以相同的链表形式返回计算的结果。

例如:   输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)   输出:7 -> 0 -> 8


问题分析

本题其实是一个大数相加问题,题目本身难度不大,需要考虑以下几个方面: 1. 设计好数据结构,反序存储数字,如数字932存储为2 -> 3 -> 9;

节点数据结构

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
  1. 链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;
  2. 两个链表长度不一致时,要处理较长链表剩余的高位和进位计算的值;
  3. 如果最高位计算时还产生进位,则还需要添加一个额外结点。


leetcode

代码实现

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode p = new ListNode(0);
    ListNode head = p;
    int carry = 0;
    while ( l1 != null || l2 != null || carry != 0) {
        int sum = ((l1 != null)? l1.val : 0) + ((l2 != null) ? l2.val : 0) + carry;
        carry = sum / 10;
        p.next = new ListNode(sum % 10);
        p = p.next;
        l1 = (l1 != null) ? l1.next : l1;
        l2 = (l2 != null) ? l2.next : l2;
    }
    return head.next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值