LeetCode 百题攻略计划-两数相加
题目:两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例1
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例2
输入:l1 = [0], l2 = [0]
输出:[0]
示例3
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
类:
- public class ListNode {
- public int val;
- public ListNode next;
- public ListNode(int val=0, ListNode next=null) {
- this.val = val;
- this.next = next;
- }
- }
思路1:需考虑进位问题,数值满十进一。
思路1:需考虑参数长度问题,参数长度不足需补0
思路3:注意输出数组顺序
我的解法1:
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
ListNode list1=null, list2= null;
int sum,k=0;
while (l1!=null || l2!=null){
l1 = l1 == null ? new ListNode():l1;
l2 = l2 == null ? new ListNode() : l2;
sum = l1.val + l2.val + k;
if (sum >9){
sum = sum % 10;
k = 1;
}
else {
k = 0;
}
if (list2 == null){
list1 = list2 = new ListNode(sum);
}
else {
list2.next = new ListNode(sum);
list2 = list2.next;
}
l1 = l1.next;
l2 = l2.next;
}
if (k > 0){
list2.next = new ListNode(k);
}
return list1;
}
}
我的解法2:
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
if (l1 == null)
{
return l2;
}
if (l2 == null)
{
return l1;
}
l2.val = l1.val + l2.val;
if (l2.val > 9)
{
l2.val = l2.val % 10;
if (l2.next != null)
{
l2.next.val = l2.next.val + 1;
if (l2.next.val == 10)
{
l2.next = AddTwoNumbers(new ListNode(), l2.next);
}
}
else
{
l2.next = new ListNode(1);
}
}
l2.next = AddTwoNumbers(l1.next,l2.next);
return l2;
}
}
