题目
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位
数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
题目链接:https://leetcode-cn.com/problems/add-two-numbers
解题思路
1.若两个链表都为null,返回空;
2.若一个为空,一个不为空。返回不为空的链表
3.初始化输出链表,记录头节点
4.若有链表不为空或进位数不为空,计算获取值
5.其中,若有一个链表为空且进位数为空,获取不为空的链表,跳出循环
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null&&l2==null){//若两个链表都为null,返回空;
return null;
}
if(l1==null)//若一个为空,一个不为空。返回不为空的链表
return l2;
else if(l2==null)
return l1;
int b=0;
ListNode c=new ListNode(0);//初始化输出链表
ListNode h=c;//记录头节点
while(l1!=null || l2!=null ||b!=0){//若有链表不为空或进位数不为空,计算获取值
int a=l1==null?0:l1.val;
int x=l2==null?0:l2.val;
int y=a+x+b;
ListNode f=new ListNode(y%10);
c.next=f;
c=c.next;
if(y>=10)
b=y/10;
else{
b=0;
}
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
if(l1==null&&b==0){//若有一个链表为空且进位数为空,获取不为空的链表,跳出循环
c.next=l2;
break;
}
if(l2==null&&b==0){
c.next=l1;
break;
}
}
return h.next;
}
}