LeetCode 练习记录--两数之和(JAVA)

本文介绍了一种链表加法器的实现方法,通过比较两个链表的长度来确定主链表,并针对不同情况进行处理,包括进位操作。文章详细展示了如何遍历链表并进行数值相加的过程。

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

1. 判断l1,l2的长度,谁大谁为主

2. 分情况,当l2较短时,只需考虑余数和l1的值

3. 判断是否有溢出,当有溢出时(remain!=0&l1.=null),进位.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
         int remainder=0;
        ListNode sum;
        if(getSize(l1)>getSize(l2)){
            sum = addList(l1,l2);
        }
        else{

            sum = addList(l2,l1);
        }
        return sum;
    }

    public int addNum(int a, int b){
        return (a+b)%10;
    }

    public int getRemainder(int a, int b){
        return (a+b)/10;
    }

    public ListNode addList(ListNode l1,ListNode l2){
       ListNode sum=new ListNode();
        ListNode head = sum;
        int remain = 0;
        while(l1!=null){

            if(l2!=null)
            {
                head.val=(addNum(l1.val,l2.val)+remain)%10;
                remain=(addNum(l1.val, l2.val)+remain)/10;
                remain+=getRemainder(l1.val, l2.val);
                l1=l1.next;
                l2=l2.next;
            }
            else
            {
                head.val=addNum(l1.val,remain);
                remain=(l1.val+remain)/10;
                l1=l1.next;
            }
            if(l1!=null) {
                head.next = new ListNode();
                head = head.next;
            }
            else if(remain!=0){
                head.next = new ListNode(remain);
            }

        }
        return sum;
    }

    public int getSize(ListNode l){
        int length=0;
        while(l.next!=null){
            length++;
            l=l.next;
        }
        return length;
    }

    public void printList(ListNode l){
            while (l!=null){
                System.out.print(l.val);
                l=l.next;
            }
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值