class Linknode {
int val;
Linknode next;
Linknode(int x){
val = x;
}
}
class Myclass {
public Linknode generate(int a[]){
Linknode l1 = new Linknode(0);
Linknode l2 = l1;
for(int i =0;i<a.length;i++){
l2.next = new Linknode(a[i]);
l2 = l2.next;
}
return l1.next;
}
public Linknode add2Numbers(Linknode l1,Linknode l2){
Linknode curr = new Linknode(0);
Linknode p = l1,q = l2,l3 = curr;
int carry = 0;
while(p!=null || q!=null){
int x = (p!=null)?p.val:0;
int y = (q!=null)?q.val:0;
l3.next = new Linknode((x+y+carry)%10);
carry = (x+y)/10;
l3 = l3.next;
if(p!=null)p = p.next;
if(q!=null)q = q.next;
}
if(carry==1)
l3.next = new Linknode(1);
return curr.next;
}
}
public class Testclass{
public static void main(String[] args){
Myclass myclass = new Myclass();
int[] a = {1,2,3,4};
Linknode b = myclass.generate(a);
int[] a1 = {1,2,3,4,5,6};
Linknode c = myclass.generate(a1);
Linknode q = myclass.add2Numbers(b, c);
while(q!=null) {
System.out.println(q.val);
q=q.next;
}
}
}
解决大数相加的问题。LeetCode第二题。
两个链表,分别倒叙存放数字,将相加的数存放在链表中。
解题思路:在链表中,数字是倒着存储的,因此可以顺序计算。
1.首先确定需要三个链表,也就是3个指针。返回的链表我们把它命名为l3.
2.while结束的条件为两个链表均为空,当不为空时,分别计算两个链表指针所指的值;(如果某一个为空,值为0);
3.如果两值相加大于10,则需要进位,因此在一开始需要初始化一个进位的值carry,l3指针的值为(X+Y+CARRY)%10;如果小于10,l3指针的值为x+y,同时更新CARRY的值;
4.l3移动,p,q在不为空的情况下移动;
5.最后,查看carry的值。