概述
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的值。
最后
以上就是善良鸵鸟为你收集整理的JAVA链表的数相加的全部内容,希望文章能够帮你解决JAVA链表的数相加所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复