难度 中等
最近做题的速度提上来了,或许是因为知识点一点点拾回来了,不过总这样也不算好事,说明没有新的知识点出现。这道题需要把链表反转相加,我这里是直接反转了,用栈也可以,速度会更快一些,不过要牺牲一些空间。需要注意的还有一些细节,两数相加进位可能会连续进位,连续进位过程中l1或l2可能会被遍历完而为空,需要考虑到这一点。
执行用时 :3 ms, 在所有 Java 提交中击败了83.33%的用户
内存消耗 :39.7 MB, 在所有 Java 提交中击败了95.83%的用户
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
l1 = reverseList(l1);
l2 = reverseList(l2);
ListNode l3 = null;
ListNode cur = null;
int r = 0;
while(l1 != null && l2 != null || r == 1){
int sum = 0;
if(l1 != null && l2 != null){
sum = l1.val + l2.val + r;
l1 = l1.next;
l2 = l2.next;
}else if(r == 1 && l1 != null){
sum = l1.val + r;
l1 = l1.next;
}else if(r == 1 && l2 != null){
sum = l2.val + r;
l2 = l2.next;
}else if(r == 1){
sum = r;
}
r = sum/10;
ListNode temp = new ListNode(sum%10);
if(cur == null){
l3 = temp;
cur = temp;
}else{
cur.next = temp;
cur = cur.next;
}
}
if(l1 != null){
cur.next = l1;
}else if(l2 != null){
cur.next = l2;
}else{
cur.next = null;
}
l3 = reverseList(l3);
return l3;
}
public ListNode reverseList(ListNode l){
ListNode cur = l;
ListNode nTail = null;
while(cur != null){
ListNode nHead = new ListNode(cur.val);
nHead.next = nTail;
nTail = nHead;
cur = cur.next;
}
l = nTail;
return nTail;
}