题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
解法一
较为暴力的解法,将链表转换为int,然后相加,在将和转化为链表,在int转换为链表时,需要使用栈来辅助存储数字,之后栈弹出存储至链表,则实现了逆序。代码就不添出来了,较为简单。
解法二
较为标准的答案,使用进位来实现相加。碰到的主要问题是,在创建链表时,怎么保证正确开始,并且不是多输出和覆盖的问题:创建一个不为空的链表,返回结果为链表的next
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if(l1 == null && l2 == null)
return null;
// int num1 = transfor(l1);
// int num2 = transfor(l2);
//ListNode node = intToNode(num1+num2);
ListNode sum = new ListNode(0);
ListNode p = l1,q = l2,m = sum;
int i = 0;
while(p != null || q != null || i > 0){
int x = (p != null) ? p.val:0;
int y = (q != null) ? q.val:0;
m.next = new ListNode((x+y+i)%10);
m = m.next;
if(x+y+i >= 10){
i = 1;
}else{
i = 0;
}
if(p != null)
p = p.next;
if(q != null)
q = q.next;
}
return sum.next;
}