2.两数相加:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
来源:力扣(LeetCode)
首先先分析题这个是一个加法题,
根据分析你可以得出下面的一个逻辑;
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;
}
}