【力扣】2.两数相加

发布时间:2023-12-17 20:14:08

2.两数相加

这是第二题,还行豁~。

?题解:

  • 首先就是对题目的理解。这里你要知道两链表中数字的排列都是逆序的,也就是说示例一中2-4-3他原本的数字应该是342。同理可得下面链表的意思,二者相加所得到的结果也是逆序的,342+465,按照咱们正常的加法规则的话,那刚好就可以从头结点开始相加,毕竟是逆序的,逆序的,记住了哦~
  • 然后将头结点的值相加之后,我们需要保存进位的数值,然后对得到的sum进行一个处理,对吧。
  • 接着因为最后的结果是以链表展示的,而且是逆序的,那就可以将得到的数值赋值给新创建的结点,最后返回即可。
  • 这里用了pre辅助头结点,最后的返回结果是pre.next,因为我们头结点的值是0啊。

代码:

/**
 * 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) {
       ListNode pre=new ListNode(0);
       ListNode cur=pre;
       int carry=0;
       while(l1!=null||l2!=null){
           int x=l1==null?0:l1.val;
           int y=l2==null?0:l2.val;
           int sum=x+y+carry;
           //获取进位数
           carry=sum/10;
           //获取个位数
           sum=sum%10;
           //连接组合链表
           cur.next=new ListNode(sum);
           cur=cur.next;
           if(l1!=null) l1=l1.next;
           if(l2!=null) l2=l2.next;
       }
       if(carry==1){
           cur.next=new ListNode(carry);
       }
       return pre.next;
    }
}

祝你刷题愉快哦~

身体健康!

头发也健康!

文章来源:https://blog.csdn.net/qq_62649563/article/details/134977679
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。