zoukankan      html  css  js  c++  java
  • LeetCode Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8

    题意:将两个用链表逆序存储的数进行加法运算,并将结果也用链表逆序存储。如上例的342 + 564 = 807.

    题解:掌握链表的头插法和尾插法,从左往右每个节点进行加法运行,进位带入下个个节点运算。用尾插法保存结果数据。要注意节点的空判断,以防出现空指针,当计算最后的进位不为0时,要再加入一个节点存放进位。

    复制代码
    class ListNode {
          int val;
          ListNode next;
          ListNode(int x) { val = x; }
     }
    
    public class AddTwoNumbers {
        
        public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode res = new ListNode(0);
            ListNode r = res;
            int x = l1.val;
            int y = l2.val;
            res.val = ( x + y ) % 10;
            int ten = ( x + y ) / 10;
            l1 = l1.next;
            l2 = l2.next;
            
            while(l1 != null || l2 !=null ){
                // 防止出现空指针
                if(l1 == null){
                    l1 = new ListNode(0);
                    x = 0;
                }else{
                    x = l1.val;
                }
                
                if(l2 == null){
                    l2 = new ListNode(0);
                    y = 0;
                }else{
                    y = l2.val;
                }
                
                int single = ( x + y + ten ) % 10;
                ListNode tmp = new ListNode(single);
                r.next = tmp;
                r = tmp;
                ten = ( x + y + ten ) / 10;
                l1 = l1.next;
                l2 = l2.next;
            }
            //存放最后的进位
            if(ten != 0){
                r.next = new ListNode(ten);
            }
            return res;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int a[] = {5};
            int b[] = {5};
            
            ListNode la = new ListNode(0);
            la.val = a[0];
            for(int i = a.length -1 ;i>0;i--){
                ListNode next = new ListNode(a[i]);    
                next.next = la.next;
                la.next = next;
            }
            
            ListNode lb = new ListNode(0);
            lb.val = b[0];
            
            for(int i = b.length -1 ;i > 0 ;i--){
                ListNode next = new ListNode(b[i]);    
                next.next = lb.next;
                lb.next = next;
            }
            
            ListNode c = addTwoNumbers(la,lb);
            
            while( c != null){
                System.out.print(c.val);
                if(c.next != null){
                    System.out.print("-->");
                }
                c = c.next;
            }
        }
    }
    复制代码
  • 相关阅读:
    洛谷 1850 NOIP2016提高组 换教室
    2018牛客多校第三场 C.Shuffle Cards
    2018牛客多校第一场 B.Symmetric Matrix
    2018牛客多校第一场 A.Monotonic Matrix
    2018牛客多校第一场 D.Two Graphs
    2018宁夏邀请赛L Continuous Intervals
    2018宁夏邀请赛K Vertex Covers
    BZOJ
    HDU
    ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)
  • 原文地址:https://www.cnblogs.com/AndyDai/p/4810864.html
Copyright © 2011-2022 走看看