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