zoukankan      html  css  js  c++  java
  • LeetCode练习2 两数相加

    问题如下:

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    分析问题,本题是一个链表的问题。示例是输入两个三位数相加,这个三位数来自于链表的倒序组成的数,然后输出的结果也是这个和的个十百位上面的数。
    首先,我们要排除非法链表的输入,即链表一和链表二 非空 且长度一致才可以。
          public static ListNode AddTwoNumbers(ListNode l1, ListNode l2)
            {
                ListNode result = new ListNode(0);
    
                if(l1 == null || l2 == null)
                {
                    return null;
                }
    
                int l1Count = 0;
                ListNode lTmp = new ListNode(0);
                List<int> list1 = new List<int>();//用来临时存放数字
                List<int> list2 = new List<int>();//用来临时存放数字
                lTmp = l1;
                while(lTmp != null)
                {
                    list1.Add(lTmp.val);
                    l1Count++;
                    lTmp = lTmp.next;
                }
    
                int l2Count = 0;
                lTmp = l2;
                while (lTmp != null)
                {
                    list2.Add(lTmp.val);
                    l2Count++;
                    lTmp = lTmp.next;
                }
    
                int lcount = 0;
                if(l1Count > l2Count)
                {
                    lcount = l1Count;
                }
                else
                {
                    lcount = l2Count;
                }
    
                int carry = 0;//表示进位
                ListNode resultTmp = new ListNode(0);
                resultTmp = result;
                for (int i=0;i< lcount; i++)
                {
                    int l1Num = 0;
                    if (list1.Count > i)
                    {
                        l1Num = list1[i];
                    }
                    int l2Num = 0;
                    if(list2.Count > i)
                    {
                        l2Num = list2[i];
                    }
                    int sum = l1Num + l2Num;
                    if(carry > 0)
                    {
                        sum += carry;
                    }
                    int num = 0;
                    if(sum >= 10)
                    {
                        num = sum - 10;
                        carry = 1;
                    }
                    else
                    {
                        num = sum;
                        carry = 0;
                    }
    
                    resultTmp.next = new ListNode(num); //这里面比较难理解,链表传递的是地址。
                    resultTmp = resultTmp.next;//所以一个链表移动位置,另外一个链表也跟着移动(但主链表是依次赋值)
    
                }
    
                if(carry > 0)
                {
                    resultTmp.next = new ListNode(carry);
                    resultTmp = resultTmp.next;
                }
    
    
                return result.next;
            }
  • 相关阅读:
    android应用程序的混淆打包
    sql 语句的limit的用法
    Android SDK开发包国内下载地址
    在android应用程序中启动其他apk程序
    docker+k8s基础篇五
    docker+k8s基础篇四
    docker+k8s基础篇三
    docker+k8s基础篇二
    docker+k8s基础篇一
    LVS的基础使用
  • 原文地址:https://www.cnblogs.com/wangyu19900123/p/10429537.html
Copyright © 2011-2022 走看看