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;
            
            
            
            
            
            
        }
        
    }
  • 相关阅读:
    UPC OJ 一道水题 STL
    POJ2387 Til the Cows Come Home(SPFA + dijkstra + BallemFord 模板)
    HD1385Minimum Transport Cost(Floyd + 输出路径)
    POJ1679The Unique MST(次小生成树)
    POJ 1789Truck History(pirme)
    POJ2309BST(树状数组)
    POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)
    POJ2531Network Saboteur(DFS+剪枝)
    Codeforce#331 (Div. 2) A. Wilbur and Swimming Pool(谨以此题来纪念我的愚蠢)
    POJ2485Highways(prime 水题)
  • 原文地址:https://www.cnblogs.com/noaman/p/7026643.html
Copyright © 2011-2022 走看看