LeetCode-Add Two Numbers

这道题和Plus One以及Add Binary思路类似,只是将数组换成了链表。

需要注意的地方就是数组换成链表以后没法比较谁更长了,所以需要确定一个被加数,如果加数更长的话接到被加数后面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1==null)
return l2;
if(l2==null)
return l1;
int carry=0;
ListNode res=l1;
ListNode last=l1;
while(l1!=null && l2!=null){
int add=l1.val+l2.val+carry;
carry=add/10;
l1.val=add%10;
last=l1;
l1=l1.next;
l2=l2.next;
}
if(l2!=null){
last.next=l2;
l1=l2;
}
while(carry!=0){
if(l1!=null){
int add=l1.val+carry;
carry=add/10;
l1.val=add%10;
last=l1;
l1=l1.next;
}else{
carry=0;
last.next=new ListNode(1);
}
}
return res;
}
}

运行效率还不错,打败了 92%的人。