0
点赞
收藏
分享

微信扫一扫

LeetCode 2.两数相加

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

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 条评论