注意末尾有一位可能会进位产生新节点
使用的数据结构
public class ListNode {
int val;
ListNode next;
//有参构造
ListNode(int x) {
val = x;
}
@Override
public String toString() {
return
"val=" + val +"\r\n"+ next;
}
}
重写toString方法便于测试
public class ListAdd {
public static void main(String[] args) {
ListNode list1 = new ListNode(2);
list1.next = new ListNode(4);
list1.next.next = new ListNode(3);
ListNode list2 = new ListNode(5);
list2.next = new ListNode(6);
list2.next.next = new ListNode(7);
ListNode ld = addTwoNumbers(list1,list2);
System.out.println(ld);
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2){
ListNode dummyHead = new ListNode(0);
ListNode p = l1;
ListNode q = l2;
ListNode curr = dummyHead;
int carry = 0;
while(p!=null||q!=null){
int x = (p!=null)? p.val:0;
int y = (q!=null)? q.val:0;
int sum = carry+x+y;
carry = sum/10;
curr.next = new ListNode(sum%10);
curr = curr.next;
if(p!=null){
p = p.next;
}
if(q!=null){
q = q.next;
}
}
//循环结束如果有进位
if(carry==1){
curr.next = new ListNode(1);
}
//第一个节点是空节点
return dummyHead.next;
}
}