寒光博客

[java]链表实战 链表加法
链表加法 有两个用链表表示的整数,每个结点包含一个数位。 这些数位是反向存放的,也就是个位排在链表的首部。编写函数...
扫描右侧二维码阅读全文
15
2019/10

[java]链表实战 链表加法

链表加法

有两个用链表表示的整数,每个结点包含一个数位。
这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode A,ListNode B,请返回A+B的结果(ListNode*)。
1.jpg

测试样例:

{1,2,3},{3,2,1}
{7,4,0,7,5},{2,7,2,3,4}

返回:

{4,4,4}
{9,1,3,0,0,1}

代码

public class PlusLinkNode {
    static class Node {
        Object value;
        Node next;

        Node(Object value) {
            this.value = value;

        }
    }

    public static void main(String[] args) {
        int[] arr1 = {7, 4, 7, 5};
        int[] arr2 = {2, 7, 2, 3, 4};
        Node h1 = new Node(null);
        Node h2 = new Node(null);
        Node a = h1;
        Node b = h2;
        structList(a, arr1);
        structList(b, arr2);
        printList(a);
        printList(b);
        Node result = new Node(null);
        result.next = plusAB(a.next, b.next);
        printList(result);

    }

    /**
     * 打印
     *
     * @param h1
     */
    private static void printList(Node h1) {
        Node a = h1.next;
        while (a != null) {
            System.out.print("" + a.value + (a.next != null ? "," : "\n"));
            a = a.next;
        }
    }

    /**
     * 填入链表数据
     *
     * @param node
     * @param arr
     */
    private static void structList(Node node, int[] arr) {
        for (int i : arr) {
            node.next = new Node(i);
            node = node.next;
        }
    }

    public static Node plusAB(Node a, Node b) {
        return plusAB(a, b, 0);
    }

    /**
     * @param a
     * @param b
     * @param i 进位 >value
     * @return
     */
    private static Node plusAB(Node a, Node b, int i) {
        if (a == null && b == null && i == 0) {
            return null;
        }
        int value = i;
        if (a != null) {
            value += (int) a.value;
        }
        if (b != null) {
            value += (int) b.value;
        }
        Node result = new Node(value % 10);//当前节点创建的数值
        result.next = plusAB(a == null ? null : a.next, b == null ? null : b.next, value >= 10 ? 1 : 0);
        return result;
    }

}
本文作者:Author:     文章标题:[java]链表实战 链表加法
本文地址:https://dxoca.cn/java/294.html       百度未收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:October 15th, 2019 at 12:04 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment