Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are
stored in reverse order and each of their nodes contain a single digit. Add the two numbers
and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
首先十进制加法应该注意进位的处理,因为两个链表长度有可能不等长!
因此这道题还要考虑边界和异常条件的处理。
public class Solution {
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null)
return null;
/*
* 在java中,基本类型变量是传值的副本,对象型变量是传引用的副本,一次ret,ll操作的是同一内存,
* ll用来指示链表的头结点地址
*/
ListNode ll =null;
ListNode ret=ll;
int carry = 0;
int l1_val = 0;
int l2_val = 0;
while (l1 != null || l2 != null ) {
l1_val = (null == l1) ? 0 : l1.val;
l2_val = (null == l2) ? 0 : l2.val;
int add = l1_val + l2_val + carry;
ListNode n=new ListNode(add % 10);
if(ll==null){
ll=n;
ret=n;
}else{
ret.next=n;
ret=n;
}
carry = add/10;
if (null != l1)
l1 = l1.next;
if (null != l2)
l2 = l2.next;
}
if (l1 == null && l2 == null && carry!= 0){
ListNode n = new ListNode(carry);
ret.next = n;
}
return ll;
}
public static void main(String[] args) {
ListNode l1 = new ListNode(2);
ListNode x2 = new ListNode(4);
ListNode x3 = new ListNode(3);
l1.next = x2;
x2.next = x3;
ListNode l2 = new ListNode(5);
ListNode y2 = new ListNode(6);
ListNode y3 = new ListNode(4);
l2.next = y2;
y2.next = y3;
ListNode ret = addTwoNumbers(l1, l2);
while(ret!=null&&ret.next!=null){
System.out.print(ret.val+"->");
ret=ret.next;
}
if(ret!=null)
System.out.print(ret.val);
}