LeetCode[链表] - #2 Add Two Numbers

原题链接:#2 Add Two Numbers

 

要求:

给定两个以链表表示的非负整数,链表中的每个节点保存整数中的一位,以倒序排列(例如,321表示为1->2->3)。把这两个数字相加,作为一个链表返回。

 

输入:(2->4->3) + (5->6->4)

输出:7->0->8

 

难度:中等

 

分析:

本题思路比较直接,以两个指针分别遍历两个链表。值得注意的是需要进位的情况的处理。当两个指针指向的节点的值相加大于10时,设置进位标记,结果节点的值设为其和除以10取余。当一个链表遍历完成,则关注另一个链表剩余部分的进位情况即可。

 

解决方案:

Java - 504 ms

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }else if(l2==null){
            return l1;
        }
        ListNode result;
        ListNode cur;
        int curSum = l1.val + l2.val;
        boolean plusOne = false;
        if(curSum>9){
            curSum = curSum % 10;
            plusOne = true;
        }
        cur = new ListNode(curSum);
        result = cur;
        while (l1.next!=null&&l2.next!=null){
            l1 = l1.next;
            l2 = l2.next;

            if(plusOne){
                curSum = l1.val + l2.val + 1;
            }else {
                curSum = l1.val + l2.val;
            }
            if(curSum>9){
                curSum = curSum % 10;
                plusOne = true;
            }else {
                plusOne = false;
            }

            cur.next = new ListNode(curSum);
            cur = cur.next;
        }
        if(l1.next==null&&l2.next==null) {
            if(plusOne){
               cur.next = new ListNode(1);
            }
            return result;
        }else if(l1.next==null){
            while (l2.next!=null){
                l2 = l2.next;
                if(plusOne){
                    curSum = l2.val + 1;
                    if(curSum>9){
                        curSum = curSum %10;
                        plusOne = true;
                    }else {
                        plusOne = false;
                    }
                }else {
                    curSum = l2.val;
                    plusOne = false;
                }
                cur.next = new ListNode(curSum);
                cur = cur.next;
            }
        }else if(l2.next==null){
            while (l1.next!=null){
                l1 = l1.next;
                if(plusOne){
                    curSum = l1.val + 1;
                    if(curSum>9){
                        curSum = curSum%10;
                        plusOne = true;
                    }else {
                        plusOne = false;
                    }
                }else {
                    curSum = l1.val;
                    plusOne = false;
                }
                cur.next = new ListNode(curSum);
                cur = cur.next;
            }
        }
        if(plusOne){
            cur.next = new ListNode(1);
        }
        return result;
    }

 简单测试程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值