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();
}
}