题目: /*给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 */
第一种情况:(两个链表长度相同) 第二种情况:(两个链表长度不同)
解题思路:
创建一个头节点head:便于输出相加后的链表
创建一个傀儡节点dummy: 是链表中的节点从head遍历,而使head不变
创建一个addOne进位:初始值addOne=0;来判断两数相加有无进位
public class AddTwoNumbers {
public static ListNode addTwoNumbers(ListNode l1,ListNode l2){
if(l1==null&&l2==null){
return null;
}
ListNode head=new ListNode(0);
ListNode dummy=head;
int addOne=0;
while(l1!=null||l2!=null||addOne!=0 ){
int val1=l1==null?0:l1.val;//l1=null则val1=0,否则val1=l1.val
int val2=l2==null?0:l2.val;//l2=null则val2=0,否则val2=l2.val
int sum=val1+val2+addOne;
yummy.next=new ListNode(sum%10);//下一个节点的值
yummy=yummy.next;//遍历相加后的链表
addOne=sum/10;
if(l1!=null){
l1=l1.next;//遍历l1
}
if(l2!=null){
l2=l2.next;//遍历l2
}
}
return head.next ;
}
public static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val=val;
}
}