问题
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
过程:
首先初始化链表,定义要用的东西;然后为空链表初始化一个指针,防止链表构造过程中指针移动造成头指针丢失;将链表中的数取int进行计算 定义一个进位数carry,初始化为零,过程中将sum/10赋值给carry,求和是加上.求得的sum在链表中新建一个参数为carry的节点,存到curr.next中去。赋值给头结点,最后返回以first.next开头的链表,代码
代码如下(示例):
class ListNode{ //类
int value;
ListNode next; //下一个节du点
ListNode(int x){ //构造函zhi数的初始化
value = x;
//next = null;
}
}
public ListNode addTwoNumbers(ListNode l1,ListNode l2){
//为空链表初始化一个指针,防止链表构造过程中指针移动造成头指针丢失
ListNode first = new ListNode(0);
ListNode one = first;
//两数相加的进位数,初始化为零
int carry = 0;
while(l1 != null || l2 !=null){
//对X,y 进行赋值,如果不为零将l1,l2付给xy
int x = (l1 ==null)?0:l1.value;
int y = (l2 ==null)?0:l2.value;
int sum = x+y+carry;
//求商,赋值给进位数
carry = sum/10;
//求余,赋值给两个数的和
sum = sum%10;
//在链表中新建一个参数为carry的节点,存到curr.next中去。
one.next = new ListNode(sum);
one = one.next;
if (l1!=null){
l1 = l1.next;
}
if (l2!=null){
l2 = l2.next;
}
}
//进位数的判断
if (carry ==1){
one.next = new ListNode(carry);
}
return first.next;
}