【leetcode】 add two number

链表的基本操作,注意其中某个链表为空时,只要进位非零或者另外一个链表非空,依然可以继续进行相应的加法,避免产生NullPointerException的错误。


下面是我用Java实现的,跑large input需要1100ms左右。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        // Start typing your Java solution below
        // DO NOT write main() function
        ListNode res = new ListNode(0);
    	ListNode number1 = l1, number2 = l2;
//    	to indicate current list node
    	ListNode ptr = res;
//    	to indicate carry value, 0 or 1
    	int carry = 0;
    	
    	while(number1!=null || number2!=null || carry!=0){
//    		 two numbers
    		if(number1!=null && number2!=null){
    			ptr.val = (carry + number1.val + number2.val)%10;
    			carry = (carry + number1.val + number2.val)/10;
    			number1 = number1.next;
    			number2 = number2.next;
    		}
//    		only one number
    		else if(number1 != null){
    			ptr.val = (carry + number1.val) % 10;
    			carry = (carry + number1.val) / 10;
    			number1 = number1.next;
    		}
//    		only number2 is null
    		else if(number2 != null){
    			ptr.val = (carry + number2.val) % 10;
    			carry = (carry + number2.val) / 10;
    			number2 = number2.next;
    		}
//    		only carry is non-zero value
    		else{
    			ptr.val = carry % 10;
    			carry = carry / 10;
    		}
    		
//    		create new list node
    		if(number1!=null || number2!=null || carry!=0){
    			ptr.next = new ListNode(0);
    			ptr = ptr.next;
    		}
    	}// end while loop
        return res;
    }// end method addTwoNumbers
}// end class solution


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值