力扣:445. 两数相加 II
This commit is contained in:
parent
33e2f1aa4c
commit
dc808e4af5
@ -0,0 +1,83 @@
|
||||
package com.code.leet.study.t2021.t20210219;
|
||||
|
||||
import com.code.leet.entiy.ListNode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
|
||||
* <p>
|
||||
* 你可以假设除了数字 0 之外,这两个数字都不会以零开头。
|
||||
* <p>
|
||||
* <p>
|
||||
* <p>
|
||||
* 进阶:
|
||||
* <p>
|
||||
* 如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
|
||||
* <p>
|
||||
* <p>
|
||||
* <p>
|
||||
* 示例:
|
||||
* <p>
|
||||
* 输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
|
||||
* 输出:7 -> 8 -> 0 -> 7
|
||||
*/
|
||||
public class AddTwoNumbers {
|
||||
/**
|
||||
* 445. 两数相加 II
|
||||
*/
|
||||
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
|
||||
if (l1 == null) {
|
||||
return l2;
|
||||
}
|
||||
if (l2 == null) {
|
||||
return l1;
|
||||
}
|
||||
List<ListNode> list1 = new ArrayList<>();
|
||||
List<ListNode> list2 = new ArrayList<>();
|
||||
ListNode temp1 = l1;
|
||||
ListNode temp2 = l2;
|
||||
while (temp1 != null) {
|
||||
list1.add(temp1);
|
||||
temp1 = temp1.next;
|
||||
}
|
||||
while (temp2 != null) {
|
||||
list2.add(temp2);
|
||||
temp2 = temp2.next;
|
||||
}
|
||||
if (list1.size() > list2.size()) {
|
||||
return add(list1,list2);
|
||||
}else {
|
||||
return add(list2,list1);
|
||||
}
|
||||
}
|
||||
|
||||
private ListNode add(List<ListNode> list1, List<ListNode> list2){
|
||||
int sum = 0;
|
||||
int size1 = list1.size();
|
||||
int size2 = list2.size();
|
||||
int i = 0;
|
||||
for (; i < size2; i++) {
|
||||
sum = list2.get(size2 - 1 - i).val + list1.get(size1 - 1 - i).val + sum;
|
||||
list1.get(size1 - 1 - i).val = sum % 10;
|
||||
sum = sum / 10;
|
||||
}
|
||||
while (sum > 0) {
|
||||
if(size1 - 1 - i>=0){
|
||||
sum = list1.get(size1 - 1 - i).val + sum;
|
||||
list1.get(size1 - 1 - i).val = sum % 10;
|
||||
sum = sum / 10;
|
||||
i++;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(sum>0){
|
||||
ListNode head = new ListNode(sum);
|
||||
head.next = list1.get(0);
|
||||
return head;
|
||||
}
|
||||
return list1.get(0);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user