链表一般用于计算超大的两个数字之和,除此之外也可以采用BigInteger实现。
实现思路:使用两个链表分别保存两个数字,数字的每一位分别作为一个结点存入,个位数字在链表的头部,分别遍历两个链表从头结点开始计算每位之和存入新的链表。
public static Linked addTwoNumbers(Linked l1,Linked l2){
Linked.Node n1=l1.first;
Linked.Node n2=l2.first;
Linked result=new Linked();
// 进位值
int carry=0;
while(n1!=null||n2!=null){
// 取出个位
int x=n1!=null?n1.val:0;
int y=n2!=null?n2.val:0;
int sum=x+y+carry;
// 进位值
carry=sum/10;
// 保存本位结果值
result.add(sum%10);
// 移位
if(n1!=null){
n1=n1.next;
}
if (n2!=null){
n2=n2.next;
}
// 判断计算结束后是否存在进位值
}
if(carry!=0){
result.add(carry);
}
return result;
}
注意:要考虑到满十进位的问题。