给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:思路很简单,需要一个进位标志,然后依次取出第一位,相加就行了,如果结果大于10,就对10取余数,然后进位标志改变。每次相加前,查看进位标志位,如果改变了,就多加1,然后恢复进位标志。
有几点需要注意的是,首先,需要注意两个链表长度不一致的问题,其次,需要注意的是,如果最后一位仍然进位的话,链表会多出一位,切这一位的值为1。
只要注意这两点,代码也不难,最好自己写吧,我的代码写的也比较简单马虎,仅供参考吧:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
StringBuilder sb= new StringBuilder();
boolean jinWei=false;
while(l1!=null&&l2!=null) {
int temp=l1.val+l2.val;
if(jinWei) {
temp++;
jinWei=false;
}
if(temp>=10) {
jinWei=true;
temp=temp%10;
}
sb.append(temp);
l1=l1.next;
l2=l2.next;
}
if(l1==null) {
while(l2!=null) {
int temp=l2.val;
if(jinWei){
temp++;
jinWei=false;
}
if(temp>=10){
temp=temp%10;
jinWei=true;
}
sb.append(temp);
l2=l2.next;
}
}else {
while(l1!=null) {
int temp=l1.val;
if(jinWei){
temp++;
jinWei=false;
}
if(temp>=10){
temp=temp%10;
jinWei=true;
}
sb.append(temp);
l1=l1.next;
}
}
if(jinWei){
sb.append(1);
}
if(sb.length()==0) {
return null;
}
String s=sb.toString();
int a=Integer.parseInt(s.charAt(0)+"");
ListNode node = new ListNode(a);
ListNode n=node;
for(int i=1;i<s.length();i++) {
a=Integer.parseInt(s.charAt(i)+"");
n.next=new ListNode(a);
n=n.next;
}
return node;
}
}