题目
方法一:借助一个进制位,以及更新尾结点
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode tail = null;
int cay = 0;
int n1 = 0;
int n2 = 0;
while(l1 != null || l2 != null){
if(l1 == null) n1 = 0;
else n1 = l1.val;
if(l2 == null) n2 = 0;
else n2 = l2.val;
int sum = n1 + n2 + cay;
if (head == null)
head = tail = new ListNode(sum % 10);
else {
tail.next = new ListNode(sum % 10);
tail = tail.next;
}
cay = sum /10 ;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
if (cay == 1) {
tail.next = new ListNode(1);
tail.next.next = null;
}
return head;
}
方法一改进:相比较第一种,给head一个临时头节点(开始节点),最后返回的时候返回head.next,这样可以省去第一次的判断
ListNode begin = new ListNode(1);
int sum = n1 + n2 + cay;
tail.next = new ListNode(sum % 10);
tail = tail.next;
cay = sum /10 ;
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode begin = new ListNode(1);
ListNode head = begin;
ListNode tail = head;
int cay = 0;
int n1 = 0;
int n2 = 0;
while(l1 != null || l2 != null){
if(l1 == null) n1 = 0;
else n1 = l1.val;
if(l2 == null) n2 = 0;
else n2 = l2.val;
int sum = n1 + n2 + cay;
tail.next = new ListNode(sum % 10);
tail = tail.next;
cay = sum /10 ;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
if (cay == 1) {
tail.next = new ListNode(1);
tail.next.next = null;
}
return head.next;
}