给出两个表示非负整数的数字链表,数字以相反的顺序存储,每个链表都存储该非负整数某一位上的数字。计算两个非负整数的和,并以链表的方式返回。简单做个比喻:342,以链表的存储形式就是,2->4->3。
- 时间复杂度:O(n)。空间复杂度:O(n)。
```
public static ListNode Addtosum(ListNode l1,ListNode l2){
Addsum(l1,l2);
return l1;
}
public static void Addsum(ListNode l1, ListNode l2) {
l1.val+=l2.val;
if(l1.val>=10){
if(l1.next==null){
l1.next=new ListNode(0);
}
l1.next.val+=1;
l1.val=l1.val%10;
}
if(l1.next==null&&l2.next==null){
return;
}else if(l1.next!=null&&l2.next==null){
l2.next=new ListNode(0);
}else if(l1.next==null&&l2.next!=null){
l1.next=new ListNode(0);
}
Addsum(l1.next,l2.next);
}
- 时间复杂度:O(Max(m, n))。 空间复杂度:O(Max(m, n))。
public static ListNode AddNewsum(ListNode l1,ListNode l2){
ListNode t=new ListNode(0);
ListNode p=l1;
ListNode q=l2;
ListNode curr=t;
int carry=0;
while (p!=null||q!=null){
int x=p!=null?p.val:0;
int y=q!=null?q.val:0;
int sum=x+y+carry;
carry= sum/10;
curr.next=new ListNode(sum%10);
curr=curr.next;
if(p!=null){
p=p.next;
}
if(q!=null){
q=q.next;
}
}
if(carry>0){
curr.next=new ListNode(carry);
}
return t.next;
}
“`