您的位置:首页 > 其它

一天一道简单题目(2)

2018-03-18 12:56 260 查看
给出两个表示非负整数的数字链表,数字以相反的顺序存储,每个链表都存储该非负整数某一位上的数字。计算两个非负整数的和,并以链表的方式返回。简单做个比喻: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;
}


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: