首页 > 其他 > 详细

AddTwoSum

时间:2016-04-21 01:23:57      阅读:119      评论:0      收藏:0      [点我收藏+]

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来 处理相加 ,而且不再后移。

AddTwoSum

原文:http://www.cnblogs.com/coderbill/p/AddTwoSum.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!