LeetCode——2.Add Two Numbers

先贴连接!https://leetcode.com/problems/add-two-numbers/   下面是题目的截图。

题目是这样的。简单来说就是两个数相加,就是这两个数保存的方式是用链表的形式保存的。节点的结构如下:

 public class ListNode {
     int val;
     ListNode next;
     ListNode(int x) { val = x; }
 }

其中val表示当前节点的值,next表示的是下一个节点。然后数保存的时候是倒置保存的。

然后贴出代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null) 
			return l2;
		if(l2==null)
			return l1;
		ListNode result=new ListNode(0);
		ListNode l3 = result;
		while(true) {
			if(l1 != null) {
				l3.val = l1.val + l3.val;
				l1 = l1.next;
			}
			if(l2 != null) {
				l3.val = l2.val + l3.val;
				l2 = l2.next;
			}
			l3.next = new ListNode(l3.val/10);
			l3.val = l3.val%10;
			if(l1==null && l2==null) {
				l3.next = (l3.next.val == 0? null: l3.next);
				break;
			}
			l3 = l3.next;
		}
		return result;
    }
}

这已经是优化过的版本了。。。然后还是需要52ms。。。想了半天也没有想到更优化的办法。。。以后再来看吧

算法的主要难点就是:1、两个数的长短可能不同;2、每个节点相加的时候可能出现进位;3、需要一个额外的指针来指定第一个节点;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值