LeetCode之两数相加

题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807

解题

代码

/**
 * @program: algorithm_code
 * @description: 算法题2
 * @author: YangHang
 * @create: 2019-08-25 21:57
 **/

public class Num2_AddTwoNumbers {

    public static void main(String[] args) {
        // 组装数据
        ListNode list11 = new ListNode(9);
        ListNode list12 = new ListNode(9);
        list11.next = list12;

        ListNode list21 = new ListNode(9);
        printLinkedList(addTwoNumbers(list11, list21));

    }

    public static ListNode addTwoNumbers(ListNode list11, ListNode list21) {

        ListNode temp1 = list11;
        ListNode temp2 = list21;

        // 是否进位
        boolean flag = false;

        ListNode result = new ListNode(-1);
        ListNode temp = result;
        while (temp1 != null || temp2 != null) {
            int num1 = 0;
            int num2 = 0;
            if (temp1 != null) {
                num1 = temp1.val;
            }
            if (temp2 != null) {
                num2 = temp2.val;
            }

            if (flag) {
                if (num1 + num2 + 1 >= 10) {
                    temp.next = new ListNode(num1 + num2 + 1 - 10);
                    flag = true;
                } else {
                    temp.next = new ListNode(num1 + num2 + 1);
                    flag = false;
                }
            } else {
                if (num1 + num2 >= 10) {
                    temp.next = new ListNode(num1 + num2 - 10);
                    flag = true;
                } else {
                    temp.next = new ListNode(num1 + num2);
                    flag = false;
                }
            }
            temp = temp.next;
            if (temp1 != null) {
                temp1 = temp1.next;
            }
            if (temp2 != null) {
                temp2 = temp2.next;
            }
        }

        if (flag) {
            temp.next = new ListNode(1);
        }
        return result.next;
    }

    public static void printLinkedList(ListNode listNode) {

        ListNode temp = listNode;

        while (temp != null) {
            System.out.print(temp.val + " ");
            temp = temp.next;
        }
        System.out.println();
    }
}

// 链表类
class ListNode {
    int val;
    ListNode next;

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

leetcode展示

LeetCode之两数相加_链表