zoukankan      html  css  js  c++  java
  • add-two-numbers-ii

    注意:有一种好的方法,是将链表倒转,然后依次相加。

    但是,按照题目要求,用了不改变原链表的方法。

    就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位。

    https://leetcode.com/problems/add-two-numbers-ii/

    package com.company;
    
    import java.util.*;
    
    class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }
    class Solution {
    
        ListNode addTwo(ListNode l1, ListNode l2) {
            //System.out.printf("add two %d, %d 
    ", l1.val, l2.val);
            ListNode ret = new ListNode(l1.val + l2.val);
            if (l1.next != null && l2.next != null) {
                ret.next = addTwo(l1.next, l2.next);
                ret.val += ret.next.val / 10;
                ret.next.val = ret.next.val % 10;
            }
            else {
                ret.next = null;
            }
            return ret;
        }
    
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            int l1len = 0;
            ListNode ln = l1;
            while (ln != null) {
                l1len++;
                ln = ln.next;
            }
            int l2len = 0;
            ln = l2;
            while (ln != null) {
                l2len++;
                ln = ln.next;
            }
            if (l1len < l2len) {
                ln = l1;
                l1 = l2;
                l2 = ln;
                l1len = l1len ^ l2len;
                l2len = l1len ^ l2len;
                l1len = l1len ^ l2len;
            }
    
            for (int i=0; i<l1len-l2len; i++) {
                ln = new ListNode(0);
                ln.next = l2;
                l2 = ln;
            }
    
            ln = addTwo(l1, l2);
            if (ln.val >= 10) {
                ListNode newHead = new ListNode(ln.val / 10);
                ln.val = ln.val % 10;
                newHead.next = ln;
                ln = newHead;
            }
            return ln;
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("Hello!");
            Solution solution = new Solution();
    
            ListNode l1 = new ListNode(7);
            ListNode l11 = new ListNode(2);
            ListNode l12 = new ListNode(4);
            ListNode l13 = new ListNode(3);
            l1.next = l11;
            l11.next = l12;
            l12.next = l13;
            ListNode l2 = new ListNode(5);
            ListNode l21 = new ListNode(6);
            ListNode l22 = new ListNode(4);
            l2.next = l21;
            l21.next = l22;
            ListNode ret = solution.addTwoNumbers(l1, l2);
            System.out.printf("Get ret: 
    ");
            while (ret != null) {
                System.out.printf("%d", ret.val);
                ret = ret.next;
            }
            System.out.println();
    
            /*Iterator<List<Integer>> iterator = ret.iterator();
            while (iterator.hasNext()) {
                Iterator iter = iterator.next().iterator();
                while (iter.hasNext()) {
                    System.out.printf("%d,", iter.next());
                }
                System.out.println();
            }*/
    
            System.out.println();
    
        }
    }
  • 相关阅读:
    你的项目中使用过哪些JSTL标签?
    什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?
    MVC的各个部分都有那些技术来实现?如何实现?
    request.getAttribute()和 request.getParameter()有何区别?
    JS中如何将页面重定向到另一个页面?
    比较 SpringSecurity 和 Shiro?
    shiro有哪些组件?
    Apache Shiro 的三大核心组件?
    springmvc和struts2有哪些区别?
    解耦使用的设计模式:
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6013233.html
Copyright © 2011-2022 走看看