Leetcode.problem2:Add Two Numbers

  • Given nums = [2, 7, 11, 15], target = 9,

    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1].
     
  • code:
  • public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
    {
       ListNode newNode = l2;
                ListNode tailNode = null;
                bool isNeedAddOne = false;
                while (l1 != null && l2 != null)
                {
                    int tempVal = l1.val + l2.val;
                    if (isNeedAddOne)
                    {
                        tempVal++;
                    }
                    isNeedAddOne = (tempVal >= 10)?true:false;
                    l2.val = tempVal >= 10 ? tempVal - 10 : tempVal;
                    l1 = l1.next;
                    if (l2.next == null)
                    {
                        tailNode = l2;
                    }
                    l2 = l2.next;
                }
                
                if (l1 == null)
                {
                    if (l2 == null)
                    {
                        if (isNeedAddOne)
                        {
                            ListNode tempNode = new ListNode(1);
                            tailNode.next = tempNode;
                            
                        }
                    }
                    while (l2 != null && isNeedAddOne)
                    {
                        l2.val++;
    
                        isNeedAddOne = false;
                        if (l2.val >= 10)
                        {
                            l2.val -= 10;
                            isNeedAddOne = true;
                        }
                        if (l2.next == null && isNeedAddOne)
                        {
                            ListNode tempNode = new ListNode(1);
                            l2.next = tempNode;
                            isNeedAddOne = false;
                        }
                        l2 = l2.next;
                    }
                    
                }
                else if (l2 == null)
                {
                    tailNode.next = l1;
                    while (l1 != null && isNeedAddOne)
                    {
                        l1.val++;
                        isNeedAddOne = false;
                        if (l1.val >= 10)
                        {
                            isNeedAddOne = true;
                            l1.val -= 10;
                        }
                        if (l1.next == null && isNeedAddOne)
                        {
                            ListNode tempNode = new ListNode(1);
                            l1.next = tempNode;
                            isNeedAddOne = false;
                        }
                        l1 = l1.next;
                    }
                }
                return newNode;
    }

     

  • 代码思路:每个节点存一个0-9的数字,函数参数是2个节点,分别存着两个数的个位数字。对两个链表做一次等长遍历,每次把两个节点的数字相加,并把结果保存在L2节点中,如果L2链表比L1短,那么将会把之后L1的节点值更新为结果链表相应位的数字,并把L2的末尾节点的next连到L1某个节点上,如果最高位计算结果大于等于10,那么new一个节点作为结果链表的最高位。时间复杂度为O(n),空间复杂度为O(1)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值