题目要求:
给你两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。添加这两个数字并将其作为链接列表返回。
您可以假定这两个数字不包含任何前导零,除了数字0本身。
例
输入:(2→4→3)+(5→6→4) 输出: 7→0→8 说明: 342 + 465 = 807。
单链表类:
public class ListNode {
int val;
ListNode next;
ListNode(int var){
this.val = var;
}
public String toString(){
ListNode l = this;
String v = "["+val;
while(l.next!=null){
v+=","+l.next.val;
l = l.next;
}
return v+"]";
}
}
实现测试类:
public class Test {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int l3 = 0;
//记录两个链表中的数相加是否有进位
int mark = 0;
ListNode result = new ListNode(0);
//记录当前链表
ListNode curr =result;
//1、确定l1或l2中有值,如果都没有值,则结束运算
while (l1 != null || l2 != null) {
//2、如果有一个有值,则为另一个补值
l1 =(l1 != null)?l1: new ListNode(0);
l2 =(l2 != null)?l2: new ListNode(0);
//3、进行相加求值,l3的范围(0,19)
l3 = l1.val + l2.val + mark;
//4、求出是否有进位,mark的范围(0,1)
mark = l3/10;
//5、求出该位的值
curr.next = new ListNode(l3%10);
//6、将curr向下移一位,l1和l2也移一位
curr = curr.next;
l1=(l1.next!=null)?l1.next:null;
l2 = (l2.next!=null)?l2.next:null;
}
//若最后运算完毕,还有进位,则添加一位
if(mark>0){
curr.next = new ListNode(mark);
}
return result;
}
@org.junit.Test
public void test() {
ListNode l1 = new ListNode(2);
l1.next = new ListNode(4);
l1.next.next = new ListNode(3);
ListNode l2 = new ListNode(5);
l2.next = new ListNode(6);
l2.next.next = new ListNode(4);
ListNode node = addTwoNumbers(l1, l2);
System.out.println(node.toString());
}
}
public class Test {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int l3 = 0;
//记录两个链表中的数相加是否有进位
int mark = 0;
ListNode result = new ListNode(0);
//记录当前链表
ListNode curr =result;
//1、确定l1或l2中有值,如果都没有值,则结束运算
while (l1 != null || l2 != null) {
//2、如果有一个有值,则为另一个补值
l1 =(l1 != null)?l1: new ListNode(0);
l2 =(l2 != null)?l2: new ListNode(0);
//3、进行相加求值,l3的范围(0,19)
l3 = l1.val + l2.val + mark;
//4、求出是否有进位,mark的范围(0,1)
mark = l3/10;
//5、求出该位的值
curr.next = new ListNode(l3%10);
//6、将curr向下移一位,l1和l2也移一位
curr = curr.next;
l1=(l1.next!=null)?l1.next:null;
l2 = (l2.next!=null)?l2.next:null;
}
//若最后运算完毕,还有进位,则添加一位
if(mark>0){
curr.next = new ListNode(mark);
}
return result;
}
@org.junit.Test
public void test() {
ListNode l1 = new ListNode(2);
l1.next = new ListNode(4);
l1.next.next = new ListNode(3);
ListNode l2 = new ListNode(5);
l2.next = new ListNode(6);
l2.next.next = new ListNode(4);
ListNode node = addTwoNumbers(l1, l2);
System.out.println(node.toString());
}
}