zoukankan      html  css  js  c++  java
  • [LeetCode] 2. Add Two Numbers

    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.

    Example:

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8
    Explanation: 342 + 465 = 807.

    两数相加。

    这题不难,思路是直接做加法,因为linked list给你的时候头结点是数字的最低位,不需要做reverse之类的操作,记得最后判断是不是还有额外的一个进位。

    时间O(n)

    空间O(1)

    JavaScript实现

     1 /**
     2  * @param {ListNode} l1
     3  * @param {ListNode} l2
     4  * @return {ListNode}
     5  */
     6 var addTwoNumbers = function (l1, l2) {
     7     let dummy = new ListNode(0);
     8     let cur = dummy;
     9     let carry = 0;
    10     let p1 = l1;
    11     let p2 = l2;
    12     while (p1 !== null || p2 !== null) {
    13         if (p1 !== null) {
    14             carry += p1.val;
    15             p1 = p1.next;
    16         }
    17         if (p2 !== null) {
    18             carry += p2.val;
    19             p2 = p2.next;
    20         }
    21         cur.next = new ListNode(carry % 10);
    22         carry = parseInt(carry / 10);
    23         cur = cur.next;
    24     }
    25     if (carry === 1) {
    26         cur.next = new ListNode(1);
    27     }
    28     return dummy.next;
    29 };

    Java实现

     1 class Solution {
     2     public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
     3         ListNode dummy = new ListNode(0);
     4         ListNode cur = dummy;
     5         int sum = 0;
     6         ListNode p1 = l1;
     7         ListNode p2 = l2;
     8         while (p1 != null || p2 != null) {
     9             if (p1 != null) {
    10                 sum += p1.val;
    11                 p1 = p1.next;
    12             }
    13             if (p2 != null) {
    14                 sum += p2.val;
    15                 p2 = p2.next;
    16             }
    17             cur.next = new ListNode(sum % 10);
    18             sum /= 10;
    19             cur = cur.next;
    20         }
    21         if (sum == 1) cur.next = new ListNode(1);
    22         return dummy.next;
    23     }
    24 }

    相关题目

    2. Add Two Numbers

    445. Add Two Numbers II

    21. Merge Two Sorted Lists

    1634. Add Two Polynomials Represented as Linked Lists

    LeetCode 题目总结

  • 相关阅读:
    ⛅剑指 Offer 11. 旋转数组的最小数字
    ✨Shell脚本实现Base64 加密解密
    Linux配置Nginx
    378. Kth Smallest Element in a Sorted Matrix
    875. Koko Eating Bananas
    278. First Bad Version
    704. Binary Search
    69. Sqrt(x)
    LeetCode 110 判断平衡二叉树
    LeetCode 43 字符串相乘
  • 原文地址:https://www.cnblogs.com/cnoodle/p/11664699.html
Copyright © 2011-2022 走看看