LeetCode两数相加
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
解题思路:
1、两个链表每个对应元素相加求和,若是产生进位,由于链表逆序则下一元素+1,由于链表元素都是0-9以内,故而进位只有1。
2、链表长度不固定,对于较短链表元素用0补充,将链表长度统一。
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
public class Solution {
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
if (l1==null&&l2==null)return null;
if (l1==null)l1=new ListNode(0);
if (l2==null)l2=new ListNode(0);
int sum=l1.val+l2.val;
if (sum>9){
if (l1.next==null)l1.next=new ListNode(0);
l1.next.val++;
return new ListNode(sum%10,addTwoNumbers(l1.next,l2.next));
}
return new ListNode(sum,addTwoNumbers(l1.next,l2.next));
}
}
分析:
1、链表长度不固定是隐性条件,我们需要将链表的长度统一起来。
2、对于元素发生进位时的处理,返回链表的下一元素+1,同时还要注意对链表的下一元素进行判空,若为空,则赋值为0。
3、注意到ListNode类中的重写的构造函数包含 ListNode(int val, ListNode next),我们可以进行递归调用,将val替换为元素相加后的结果。