2. 两数相加

题目描述

思路

989. 数组形式的整数加法的竖式计算方法基本一样。无非是按位相加并且注意进位及某个数组的数加完了的情况。
另外提一嘴,LeetCode的题目把好些边界情况都给去了,这样不好。

Java代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res = new ListNode();
        ListNode temp = new ListNode();
        temp.next = res;
        int carry = 0;

        while (l1 != null && l2 != null) {
            temp.next.val = l1.val + l2.val + carry;
            if (temp.next.val >= 10) {
                temp.next.val = temp.next.val % 10;
                carry = 1;
            } else {
                carry = 0;
            }
            temp.next.next = new ListNode();
            temp = temp.next;
            l1 = l1.next;
            l2 = l2.next;
        }

        if (l1 == null && l2 == null) {
            if (carry == 1) {
                temp.next.val = 1;
            } else {
                temp.next = null;
            }
        } else if (l1 == null && l2 != null) {
            while (carry == 1 && l2 != null) {
                temp.next.val = l2.val + carry;
                if (temp.next.val >= 10) {
                    temp.next.val = temp.next.val % 10;
                    carry = 1;
                } else {
                    carry = 0;
                }
                temp.next.next = new ListNode();
                temp = temp.next;
                l2 = l2.next;
            }
            if (l2 == null) {
                if (carry == 1) {
                    temp.next.val = 1;
                } else {
                    temp.next = null;
                }
            } else if (carry == 0) {
                temp.next = l2;
            }

        } else if (l1 != null && l2 == null) {
            while (carry == 1 && l1 != null) {
                temp.next.val = l1.val + carry;
                if (temp.next.val >= 10) {
                    temp.next.val = temp.next.val % 10;
                    carry = 1;
                } else {
                    carry = 0;
                }
                temp.next.next = new ListNode();
                temp = temp.next;
                l1 = l1.next;
            }
            if (l1 == null) {
                if (carry == 1) {
                    temp.next.val = 1;
                } else {
                    temp.next = null;
                }
            } else if (carry == 0) {
                temp.next = l1;
            }

        }

        return res;
    }
}

执行用时:2 ms, 在所有 Java 提交中击败了99.91%的用户
内存消耗:38.9 MB, 在所有 Java 提交中击败了30.50%的用户

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个...
    御坂10241阅读 215评论 0 0
  • 一. 问题 原题引自2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序...
    tobeNULL阅读 169评论 0 0
  • 题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个...
    程序员A君阅读 143评论 0 0
  • 2020/2/19 题目描述 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方...
    icespark阅读 267评论 0 0
  • 2. 两数相加 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每...
    liulei_ahu阅读 290评论 0 2