def add_two_numbers(l1,l2):
dummy=type('N',(),{'val':0,'next':None})()
cur=dummy; carry=0
while l1 or l2 or carry:
a=l1.val if l1 else 0; b=l2.val if l2 else 0
carry,rem=divmod(a+b+carry,10)
cur.next=type('N',(),{'val':rem,'next':None})()
cur=cur.next
if l1: l1=l1.next
if l2: l2=l2.next
return dummy.next
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
ListNode dummy=new ListNode(0),cur=dummy; int carry=0;
while(l1!=null||l2!=null||carry!=0){
int a=l1!=null?l1.val:0; int b=l2!=null?l2.val:0;
int sum=a+b+carry; carry=sum/10;
cur.next=new ListNode(sum%10); cur=cur.next;
if(l1!=null) l1=l1.next;
if(l2!=null) l2=l2.next;
} return dummy.next;
}
divmod() gets carry and remainder together.
def add_two_numbers(l1,l2):
dummy=type('N',(),{'val':0,'next':None})()
cur=dummy; carry=0
while l1 or l2 or carry:
a=l1.val if l1 else 0; b=l2.val if l2 else 0
carry,rem=divmod(a+b+carry,10)
cur.next=type('N',(),{'val':rem,'next':None})()
cur=cur.next
if l1: l1=l1.next
if l2: l2=l2.next
return dummy.next
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
ListNode dummy=new ListNode(0),cur=dummy; int carry=0;
while(l1!=null||l2!=null||carry!=0){
int a=l1!=null?l1.val:0; int b=l2!=null?l2.val:0;
int sum=a+b+carry; carry=sum/10;
cur.next=new ListNode(sum%10); cur=cur.next;
if(l1!=null) l1=l1.next;
if(l2!=null) l2=l2.next;
} return dummy.next;
}
1. Process digits with carry 2. New node per sum