您的位置:首页 > 其它

LeetCode 002 Add Two Numbers

2015-03-15 10:17 337 查看
题目

两个数,每位都按照链表倒序存储。

求和,存入新的链表中。

代码

public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null || l2!=null || c!=0){
int l2Val = 0;
int l1Val = 0;
if(l1!=null){
l1Val = l1.val;
l1 = l1.next;
}
if(l2!=null){
l2Val = l2.val;
l2 = l2.next;
}

int sum = l1Val+l2Val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;

}
return dummy.next;
}
}

总结

1 逻辑很简单,但是很多细节容易忽略: 一个数结束了怎么办,两个数都结束了c不为1怎么办。

2 一开始选择判断两个数都不为null 来计算,会产生很多冗余代码。

3 选择只要一个数不为null 或者c 不为0 ,就能化整为零。

贴一下冗余代码

public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(Integer.MIN_VALUE);
int c = 0;
ListNode cur = dummy;
while(l1!=null && l2!=null){
int sum = l1.val+l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
l2 = l2.next;
}

if(l1!=null){
while(l1!=null){
int sum = l1.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l1 = l1.next;
}
}
if(l2!=null){
while(l2!=null){
int sum = l2.val+c;
int cursum = sum>=10?sum-10:sum;
c = sum>=10?1:0;
ListNode newNode = new ListNode(cursum);
cur.next = newNode;
cur = cur.next;
l2 = l2.next;
}
}

if(c>=1){
ListNode newNode = new ListNode(1);
cur.next = newNode;
}
return dummy.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: