一、没看答案前自己写的
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int l1length = 0;
ListNode headl1 = l1;
ListNode headl2 = l2;
while (l1!=null) {
l1length++;
l1 = l1.next;
}
int l2length = 0;
while (l2!=null) {
l2length++;
l2 = l2.next;
}
ListNode result = null;
ListNode minNode =null;
if (l1length > l2length) {
result = headl1;
minNode = headl2;
} else {
result = headl2;
minNode = headl1;
headl1 = headl2;
}
int jinwei = 0;
while(result != null) {
int minNum = 0;
if (minNode!=null) {
minNum = minNode.val;
minNode = minNode.next;
}
if ((minNum+result.val+jinwei) >= 10) {
result.val = (minNum+result.val+jinwei)%10;
jinwei = 1;
} else {
result.val = minNum + result.val + jinwei;
jinwei = 0;
}
if(result.next == null) {
l1 = result;
}
result = result.next;
}
if (jinwei == 1) {
l1.next = new ListNode(1);
}
return headl1;
}
}
期间在 while(result.next!=null) {
if(reslut !=null) {
reslut = result.next;
}
}导致了死循环。自己能做出来,各种修修补补,有个人说得好,好的代码是一起写成的。修修补补的最后都是有问题的。
二、比较好的写法
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode cursor = pre;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {
int l1Val = l1 == null ? 0 : l1.val;
int l2Val = l2 == null ? 0 : l2.val;
int sumVal = l1Val + l2Val + carry;
carry = sumVal / 10;
ListNode sumNode = new ListNode(sumVal % 10);
cursor.next = sumNode;
cursor = sumNode;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return pre.next;
}
}
时间复杂度 O(m+n)