算法-两数相加(150)

 我们首先创建一个虚拟头节点dummy,它的主要作用是简化边界条件的处理。然后,我们使用一个循环来遍历两个链表,同时考虑进位。在循环中,我们计算当前位的和(包括从上一个计算中可能遗留下来的进位),然后更新进位和当前节点。如果两个链表中的某个链表已经遍历完,我们将对应的值视为0。最后,我们返回虚拟头节点的下一个节点,它实际上是结果链表的头节点

代码如下:

public class addNumber {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy=new ListNode(0);//创建一个虚拟头节点
        ListNode cur=dummy; //当前操作节点初始化为虚拟头节点
        int carry=0; //进位初始化为0
        while(l1!=null || l2!=null||carry>0){
            int x=l1!=null?l1.val:0;// 如果l1不为空则取l1的值否则取0
            int y=l2!=null?l2.val:0;
            int sum=x+y+carry;//计算当前位的和(包括进位)
            carry=sum/10;
            cur.next=new ListNode(sum%10); //创建新节点存储当前位的值
            cur=cur.next; //移动到下个节点
            if(l1!=null) l1=l1.next;
            if(l2!=null) l2=l2.next;
        }
        return dummy.next;//返回虚拟头节点的下一个节点作为结果链表的头节点
    }
}

注意这里的三元运算符,简化了运算。

cur.next= new ListNode(sum%10) 其实你就可以理解成 cur.next=sum%10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翔山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值