AddTwoSum

https://leetcode.com/problems/add-two-numbers/ 

简单来说就是两个链表存了两个整数,  123  会存为 3->2->1  , 给定了两个链表,让你把他们的和以链表的形式返回。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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来 处理相加 ,而且不再后移。

posted @   javacoderbill  阅读(275)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示