LeetCode 刷题之 Add Two Numbers

LeetCode 刷题之 Add Two Numbers

/**
 * @Time : 20/03/2018 09:54
 * @Author : lotus
 * @File : AddTwoNumbers.java
 * @Software: IntelliJ IDEA
 * @Desc :
 * @license : Copyright(C), Alex
 * @Contact : alex.cs.monash@gmail.com
 */

import java.util.Scanner;

/**
 * Definition for singly-linked list.
 */
class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

/**
 * Question 2: Add Two Numbers
 *
 * You are given two non-empty linked lists representing two non-negative integers.
 * 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.
 *
 * You may assume the two numbers do not contain any leading zero, except the number 0 itself.
 *
 * Example
 *
 * Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
 * Output: 7 -> 0 -> 8
 * Explanation: 342 + 465 = 807.
 */

public class AddTwoNumbers {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode nodeHead = new ListNode(0);
        ListNode previousNode = nodeHead;
        int carry = 0;
        ListNode p = l1;
        ListNode q = l2;
        while (p != null || q != null || carry != 0) {
            int sum = 0;
            if (p != null) {
                sum += p.val;
                p = (p.next != null) ? p.next : null;
            }
            if (q != null) {
                sum += q.val;
                q = (q.next != null) ? q.next : null;
            }
            sum += carry;
            ListNode nextNode = new ListNode(sum % 10);
            previousNode.next = nextNode;
            previousNode = nextNode;
            carry = sum / 10;
        }

        return nodeHead.next;
    }

    public ListNode createListNode(char[] nodeListString) {
        ListNode nodeHead = new ListNode(0);
        ListNode previousNode = nodeHead;
        for (int i = 1; i < nodeListString.length - 1; i += 5) {
            ListNode nextNode = new ListNode( Integer.parseInt(nodeListString[i] + ""));
            previousNode.next = nextNode;
            previousNode = nextNode;
        }
        return nodeHead.next;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] inputArray = input.split(" \\+ ");
        char[] nodeListString1 = inputArray[0].toCharArray();
        char[] nodeListString2 = inputArray[1].toCharArray();

        AddTwoNumbers addTwoNumbers = new AddTwoNumbers();
        ListNode l1 = addTwoNumbers.createListNode(nodeListString1);
        ListNode l2 = addTwoNumbers.createListNode(nodeListString2);

        ListNode resultListNode = addTwoNumbers.addTwoNumbers(l1, l2);
        System.out.print("(");
        while (resultListNode != null) {
            System.out.print(resultListNode.val);
            if (resultListNode.next != null) {
                System.out.print(" -> ");
            }
            resultListNode = resultListNode.next;
        }
        System.out.print(")");

        scanner.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值