leetcode 002 Add Two Numbers

这道题的主要精髓就是循环两个链表,将两个链表的元素相加,这个不难。

这道题的主要坑点是在于:

1.这两个可能一开始就有一个是空的,直接输出另一个链表。

2.相加的时候是有进位的,我们需要设一个bool变量,如果有进位下一位则加1,因为9+9最大也才18,进位一定是1。

3.在循环的过程中我们可能会遇到一个链表到结尾了,另外一个链表没到结尾的情况。我们则把剩下的不为null的链表输出。

4.在最后一位也有可能是进位,在循环执行完需要在判断一下如果有进位则在结果链表的末尾再加一个链结(1);

5.这一点是我踩的坑,在每次判断进位的时候如果不大于等于10,则要把bool变量flag设成false。其实不设flag设int可能好一些,

 第一行是flag 的,第二行是int的。

 resNum = l1.val + l2.val;
 resNum = l1.val + l2.val + upNum;
以下是我通过的代码(JAVA语言)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
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 res = result;
        int num = 0; 
        boolean flag = false;
        while( l1 != null || l2 != null){
            if( l1 == null)
                l1 = new ListNode(0);
            if( l2 == null)
                l2 = new ListNode(0);
            num = l1.val + l2.val;
            if( flag)
                num++;
            if( num >= 10){
                num = num % 10;
                flag = true;
            }else{
                flag = false;
            }
                
            ListNode a= new ListNode(num);
            res.next = a;
            res = res.next;
            l1 = l1.next;
            l2 = l2.next;
        }
        if( flag)
            res.next = new ListNode(1);
        return result.next;
    }
}

第二篇了。一定要努力。坚持才是胜利!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值