0
点赞
收藏
分享

微信扫一扫

LeetCode 2.两数相加

肉肉七七 2022-04-16 阅读 58
算法

2.两数相加:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

首先先分析题这个是一个加法题,

根据分析你可以得出下面的一个逻辑;

while(l1 !=null || l2 != null){

sum=l1.val+l2.val;
l1=l1.next;
l2=l2.next;

}

根据题目你可以看到当链表同位中的两个数相加满10的话余数留在当前位,后一位数加一,你就会得到下面的逻辑:

ListNode h1=null;
while(l1 !=null || l2 != null){

int sum=l1.val+l2.val;
//这样就取得了余数
h1.next=new ListNode(sum%10);
h1=h1.next;
//这样就完成了后一位加1的操作
int z =sum/10;
l1=l1.next;
l2=l2.next;

}

完善逻辑

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //你要返回一个链表所以我直接新建一个;
    ListNode h1= null,h2 =null;
    //满10的余数你需要保留下把
    int z=0;
    while(l1 !=null || l2 != null){
        //两个链表长短不一,短补零
        int x=l1 != null ? l1.val :0;
        int y= l2 != null ? l2.val :0;
        int sum =x+y+z;
        if(h1 == null){
        //通过h1=h2 System.out.println(h1 + "==" + h2);你可知h1和h2的链表是一个。h2相当于一个中间变量
        h1= h2= new ListNode(sum%10);
        System.out.println(xList + "==" + newList);
        }else{
            h2.next =new ListNode(sum%10);
            h2=h2.next;
        }
        z=sum/10;
        if(l1 != null){
            l1=l1.next;
        }
        if(l2 != null){
            l2 =l2.next;    
        }
    }
    if(z>0){
    h2.next =new ListNode(z);
    }
    return h1;
}
}

举报

相关推荐

0 条评论