两数相加

题目形容:给你两个 非空 的链表,示意两个非负的整数。它们每位数字都是依照 逆序 的形式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以雷同模式返回一个示意和的链表。

你能够假如除了数字 0 之外,这两个数都不会以 0 结尾。

示例阐明请见LeetCode官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:链表遍历

遍历2个链表,值相加,记录是否进位+1。

留神点:当遍历到2个链表的最初一个值时,须要留神是否进位,如果有进位,须要增加一个节点。

public class Solution {    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {        ListNode result = new ListNode(0);        ListNode cur = result;        int addOne = 0;        while (l1 != null || l2 != null) {            int sum = 0;            sum += addOne;            if (l1 != null) {                sum += l1.val;                l1 = l1.next;            }            if (l2 != null) {                sum += l2.val;                l2 = l2.next;            }            addOne = sum / 10;            cur.next = new ListNode(sum % 10);            cur = cur.next;        }        if (addOne > 0) {            cur.next = new ListNode(addOne);        }        return result.next;    }    public static void main(String[] args) {        ListNode l1 = new ListNode(2);        l1.next = new ListNode(4);        l1.next.next = new ListNode(3);        ListNode l2 = new ListNode(5);        l2.next = new ListNode(6);        l2.next.next = new ListNode(4);        ListNode result = addTwoNumbers(l1, l2);        System.out.println("result:");        while (result != null) {            System.out.print(result.val + " ");            result = result.next;        }    }}class ListNode {    int val;    ListNode next;    ListNode(int x) {        val = x;    }}