两数相加
思路:需要考虑三个值,第一个链表的值,第二个链表的值,两个链表相加之后的进位值
循环条件则为当两个表同时为空的时候才截至。
具体流程为:从l1和l2取出值,判断是否为空,为空给赋值上0,否则为其对应值,创建新链表,将l1和l2对应值分别赋值给v1、v2,用sum加上v1和v2的值和进位的值(一开始进位为0),然后对sum/10,将进位求出赋值,链表的元素则进行模10得出个位赋值,然后不断循环求出结果。最后要进行判断最后一次相加的结果是否大于10,把多出来的值进行进位连接
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null)return l2;
if(l2==null)return l1;
ListNode newHead=new ListNode(0);
ListNode tail=newHead;
int carry=0;
while(l1!=null||l2!=null){
int v1=0;
if(l1!=null){
v1=l1.val;
l1=l1.next;
}
int v2=0;
if(l2!=null){
v2=l2.val;
l2=l2.next;
}
int sum=v1+v2+carry;
ListNode node=new ListNode(sum%10);
tail.next=node;
tail=tail.next;
carry=sum/10;
}
// 检查最后的进位
if (carry > 0) {
// carry == 1
tail.next = new ListNode(carry);
}
return newHead.next;
}
|