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.java
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。node
您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。git
示例:app
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 緣由:342 + 465 = 807
<!--more-->ide
ListNode
類,循序漸進的作下去就是可行的node1[0]與node2[0]相加,node1[1]與node2[1]相加....
也`就是索引相同的部分相加)</font>node
的當前索引都不爲null
,那就m=兩數相加且要加上上次的進位
計算,滿10進1,因此當前索引保留m%10
,進位m/10
,如有其中一個爲null
,則另外一個只用加進位便可new
一個新的ListNode
new
了ListNode
,因此最後取l3.next
即爲結果package com.dasnnj.practice.medium; /** * Description <p> TODO: * 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。 * <p> * 若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 * <p> * 您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。 * <p> * 示例: * <p> * 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) * 輸出:7 -> 0 -> 8 * 緣由:342 + 465 = 807 * </p> * * @author DASNNJ <a href="mailto:dasnnj@outlook.com"> dasnnj@outlook.com </a> * @date 2019-05-06 09:07 */ public class TwoAdd { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(0); int m = 0; //進位 int n = 0; ListNode l = l3; while (l1 != null || l2 != null) { l.next = new ListNode(0); l = l.next; if (l1 == null) { //則l2必然不爲null // l.val = l2.val + n; m = l2.val + n; } else if (l2 == null) { //則l1必然不爲null // l.val = l1.val + n; m = l1.val + n; } else { m = (l1.val + l2.val) + n; } n = m / 10; if (n > 0) { l.val = m % 10; //此步爲了最後一個位置的兩個數字加了以後須要進位 l.next = new ListNode(n); // l3.next.val = n; } else { l.val = m; } l1 = l1 == null ? null : l1.next; l2 = l2 == null ? null : l2.next; } return l3.next; } public static void main(String[] args) { ListNode l1 = new ListNode(1); l1.next = new ListNode(8); l1.next.next = new ListNode(3); ListNode l2 = new ListNode(0); l2.next = new ListNode(6); l2.next.next = new ListNode(7); TwoAdd t = new TwoAdd(); ListNode l3 = t.addTwoNumbers(l1, l2); System.out.println(l3); } } class ListNode { int val; ListNode next; ListNode(int x) { val = x; } @Override public String toString() { final StringBuilder sb = new StringBuilder("ListNode{"); sb.append("val=").append(val); sb.append(", next=").append(next); sb.append('}'); return sb.toString(); } }