题目
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int flag = 0;
ListNode tmp = null;
ListNode result = null;
while(!(l1==null&&l2==null)) {
int num1 = (l1==null)?0:l1.val;
int num2 = (l2==null)?0:l2.val;
int res = num1+num2+flag;
if(tmp==null) {
tmp = new ListNode(res%10);
} else {
tmp.next = new ListNode(res%10);
tmp = tmp.next;
}
if(result == null) {
result = tmp;
}
flag = res/10;
l1 = (l1==null)?null:l1.next;
l2 = (l2==null)?null:l2.next;
}
if(flag!=0) {
tmp.next = new ListNode(flag);
}
return result;
}
拓展
如果链表中的数字不是按逆序存储的呢?
思想
1、反转链表后用该算法(可借助栈)
2、先计算链表长度,再根据位数直接计算,形如: