https://leetcode.com/problems/add-two-numbers/
简单来说就是两个链表存了两个整数, 123 会存为 3->2->1 , 给定了两个链表,让你把他们的和以链表的形式返回。
代码如下:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(-1) ; // 链表的头,方便链表存储
ListNode last = head ;
boolean flag= false ; // 标记 是否有进位
while(l1!=null|| l2!=null){
int val1 = l1==null?0: l1.val ; //
int val2 = l2==null?0: l2.val ;
int sum = val1+val2 ;
if(flag==true) sum++ ;
if(sum>=10) flag = true ;
else flag = false ;
last.next = new ListNode(sum%10) ; ;
last = last.next;
l1=l1==null? l1: l1.next ;
l2=l2==null? l2: l2.next ;
}
if(flag==true) last.next=new ListNode(1) ; //
return head.next;
}
}
整数加法都是先拿 两个数 的 个位 相加 ,得到一个 2-18 的 数 ,这个数 是 个位的和 , 把 这个和 的 个位留下,作为 得数 的个位。 如果产生了 进位就 记录下来 ,然后 取 两个数 的 十 位, 相加后处理个位的进位,记录十位是否产生进位,以此类推。需要注意的是,两个链表的长度是不定的,像 1 和 1->2 相加 ,当你想取 1 的 十位时 并没有数可取 ,如果当前链表指向空的时候 ,可以当作0来 处理相加 ,而且不再后移。
原文:http://www.cnblogs.com/coderbill/p/AddTwoSum.html