文章--LeetCode算法--AddTwoNumbers

AddTwoNumbers

问题描述

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.

示例

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

解决思路

思路:数字进位问题,该位有效值为值%10,进位值为值/10。可以使用一个变量记录进位值。

实现代码

 package com.leetcode.play;

/**
 * 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.
 *
 * Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
 * Output: 7 -> 0 -> 8
 */

public class AddTwoNumbers {

    public static void main(String[] args) {
        ListNode node = new ListNode();
        ListNode node2 = new ListNode();
        ListNode node3 = new ListNode();
        node.val = 2;
        node.next = node2 ;
        node2.val = 4;
        node2.next = node3;
        node3.val = 3;
        node3.next = null ;

        ListNode node4 = new ListNode();
        ListNode node5 = new ListNode();
        ListNode node6 = new ListNode();
        node4.val = 5;
        node4.next = node5 ;
        node5.val = 6;
        node5.next = node6;
        node6.val = 4;
        node6.next = null ;

        ListNode listNode =  addTwoNumbers(node,node4);



    }

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode lResult = new ListNode(0);
        ListNode lPointer = lResult;
        while (l1 != null || l2 != null) {
            int n1 = 0, n2 = 0;
            if (l1 != null) {
                n1 = l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                n2 = l2.val;
                l2 = l2.next;
            }
            int temp = n1 + n2 + carry;
            carry = temp / 10;
            temp %= 10;
            lPointer.next = new ListNode(temp);
            lPointer = lPointer.next;
        }
        if (carry > 0) {
            lPointer.next = new ListNode(carry);
        }
        return lResult.next;
    }

    public static class ListNode{
        public int val ;
        public ListNode next ;

        public ListNode() {
        }

        public ListNode(int val) {
            this.val = val;
        }

        public ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }

        public int getVal() {
            return val;
        }

        public void setVal(int val) {
            this.val = val;
        }

        public ListNode getNext() {
            return next;
        }

        public void setNext(ListNode next) {
            this.next = next;
        }
    }




}

posted @ 2019-07-18 10:33  AI,me  阅读(118)  评论(0编辑  收藏  举报