zoukankan      html  css  js  c++  java
  • 【12】链式A+B

    【题目】

    题目描述
    有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
    给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
    测试样例:
    {1,2,3},{3,2,1}
    返回:{4,4,4}

    【代码】

    1 使用递归

    import java.util.*;
    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Plus {
        public ListNode plusAB(ListNode a, ListNode b) {
            if (a == null)
                return b;
            if (b == null)
                return a;
            
            return plusAB(a, b, 0);        
        }
        
        public ListNode plusAB(ListNode a, ListNode b, int sum) {
            if (a == null && b == null && sum == 0){
                return null;
            }
            if (a != null){
                sum += a.val;
            }
            if (b != null){
                sum += b.val;
            }
            
            ListNode tempNode = new ListNode(sum % 10);
            
            a = a == null ? null: a.next;
            b = b == null ? null: b.next;
            tempNode.next = plusAB(a, b , sum / 10);
            
            return tempNode;
            
            
        }
    }

    2 常规方法

    import java.util.*;
    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Plus {
        public ListNode plusAB(ListNode a, ListNode b) {
            if (a == null)
                return b;
            if (b == null)
                return a;
            
            ListNode plusNode = new ListNode(-1);      
            ListNode plusHead = plusNode;
            
            int shi = 0;
            int ge = 0;
            int sum = 0;
             int aVal = 0;
             int bVal = 0;
            while (a != null || b != null || shi != 0){
                
                aVal = a==null ? 0 : a.val;
                bVal = b==null ? 0 : b.val;
                //每次需要加上进位值
                sum = aVal + bVal + shi;
                //进位,若sum为个位,则进位值为0
                shi = sum / 10;
                ge = sum % 10;
                
                ListNode tempNode = new ListNode(ge);      
                plusNode.next = tempNode;
                plusNode = plusNode.next;
                
                a = a==null ? null : a.next;
                b = b==null ? null : b.next;
                
            }
            return plusHead.next;
            
            
            
            
            
            
        }
        
    }
  • 相关阅读:
    ASP.NET Core开发者路线指南(转)
    一文读懂QPS、TPS、PV、UV、GMV、IP、RPS(转)
    后端开发术语大全转
    css 动态设置某一元素随浏览器大小而调整
    .NET FTP上传文件
    bootstrapselectpicker 插件事件
    Node.js安装及环境配置之Windows篇
    EasyUI表单验证插件扩展
    程序员需要知道的缩写和专业名词转
    JavaScript指定日期格式化
  • 原文地址:https://www.cnblogs.com/noaman/p/7026643.html
Copyright © 2011-2022 走看看