您的位置:首页 > 其它

2_Add Two Number

2015-09-21 20:43 239 查看
一、题目






题目描述:

传入2个链表,比如2->4->3其实表示的是342,5->6->4其实表示的是465,将2个链表相加,也就是342+465=807,然后将807反转为链表7->0->8。其实就是大数相加问题。

二、解决

思路:通过2个链表同时扫描,用大数相加的方法,c表示进位,num表示当前的值,从头扫描到最后

public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
int num = l1.val + l2.val;
int c = 0;
if (num > 9){
c = num / 10;
num %= 10;
}
ListNode current = new ListNode(num);
ListNode result = current;

l1 = l1.next;
l2 = l2.next;
while (l1!=null && l2!=null){
num = l1.val + l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;

l1 = l1.next;
l2 = l2.next;
}

while (l1 != null){
num = l1.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l1 = l1.next;
}

while (l2 != null){
num = l2.val + c;
if (num > 9){
c = num / 10;
num %= 10;
} else {
c = 0;
}
ListNode temp = new ListNode(num);
current.next = temp;
current = current.next;
l2 = l2.next;
}

if (c != 0){
ListNode temp = new ListNode(c);
current.next = temp;
current = current.next;
}
return result;
}

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