【Leetcode】Add two numbers JAVA

我也开始刷leetcode啦~最近把自己写的一些觉得比较精彩的leetcode代码放上来,会带解释的~都是自己测试在leetcode上面测试过的!

大部分自己也会把测试部分的main函数或class写上,方便大家拷回去自己测试~



本题的关键:

1.两个list可能不一样长

2.两个digit相加如果大于等于10需要进位

3.输出的node要reverse(反向)


import testAndfun.LLCycle.ListNode;

public class addTwoNum {
public staticvoid main(String[]args) {
        ListNode l1 = new ListNode(2);
        ListNode x2 = new ListNode(4);
        ListNode x3 = new ListNode(3);
        l1.next = x2;
        x2.next = x3;
         
        ListNode l2 = new ListNode(5);
        ListNode y2 = new ListNode(6);
        ListNode y3 = new ListNode(4);
        l2.next = y2;
        y2.next = y3;
         
        ListNode ret = addTwoNumbers(l1,l2);
        addTwoNum ad = new addTwoNum();
        ad.print(ret);
    }


//注意main是static,静态函数只能调用静态方法
public void print(ListNoderet) {
while(ret!=null){System.out.print(ret.val);ret=ret.next;}
}

static class ListNode{
int val;
ListNode next;
ListNode(int x){
val =x;
next=null;
}
}

//题目正式开始~~~
    public static ListNode addTwoNumbers(ListNodel1, ListNodel2) {
    int carry =0;
     
        ListNode newHead = new ListNode(0);
        ListNode p1 = l1,p2 =l2, p3=newHead; //这里要有p3用作操作,newHead用于返回
 
        while(p1 !=null ||p2 != null){//每一轮开始对p1,p2进行digit加法,如果超过10了,注意下面让p3.next先new成1
            if(p1 !=null){
                carry += p1.val;
                p1 = p1.next;
            }
 
            if(p2 !=null){
                carry += p2.val;
                p2 = p2.next;
            }
 
            p3.next =new ListNode(carry%10);
            p3 = p3.next;
            carry /= 10;
        }
  //说明之前超过10了,需要让下一位一上来多“1”
        if(carry==1) 
            p3.next=new ListNode(1);
  //注意p3也是从next开始的哦
        return newHead.next;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值