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.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode list = new ListNode(0);
ListNode node = list;
int count = 0;
while(l1 != null && l2 != null){
//count = (l1.val + l2.val) / 10;
int sum = l1.val + l2.val + count;
count = sum / 10;
node.next = new ListNode(sum % 10);
node = node.next;
l1 = l1.next;
l2 = l2.next;
}
while(l1 != null){
int sum = l1.val + count;
count = sum / 10;
node.next = new ListNode(sum % 10);
node = node.next;
l1 = l1.next;
}
while(l2 != null){
int sum = l2.val + count;
count = sum / 10;
node.next = new ListNode(sum % 10);
node = node.next;
l2 = l2.next;
}
if(count > 0){
node.next = new ListNode(count);
}
return list.next;
}
}
官方的題解:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
時間複雜度:O(n)
空間複雜度:O(n)
相關文章
- LeetCode-2 Add Two NumbersLeetCode
- LeetCode 2. Add Two NumbersLeetCode
- LeetCode OJ : 2 Add Two NumbersLeetCode
- Leetcode Add Two NumbersLeetCode
- [Leetcode] 2. Add Two Numbers QuestionEditorial SolutionLeetCode
- Leetcode-Add Two NumbersLeetCode
- Add Two Numbers leetcode javaLeetCodeJava
- LeetCode2: Add two numbers(兩數相加)LeetCode
- Fifth. LeetCode 2:Add Two Numbers 兩數之和LeetCode
- LeetCode 解題報告 - 2. Add Two NumbersLeetCode
- [leetCode][016] Add Two NumbersLeetCode
- [LeetCode] Add Two Numbers 兩個數字相加LeetCode
- Add_Two_Numbers python 求解Python
- leetcode 兩數相加(add two numbers) Python程式設計實現LeetCodePython程式設計
- Leetcode[421] Maximum XOR of Two Numbers in an ArrayLeetCode
- [leetCode][013] Two Sum 2LeetCode
- LeetCode2:Median of Two Sorted ArraysLeetCode
- Leetcode - Bitwise AND of Numbers RangeLeetCode
- LeetCode-Lexicographical NumbersLeetCode
- Leetcode Two SumLeetCode
- Leetcode Power of TwoLeetCode
- LeetCode-Bitwise AND of Numbers RangeLeetCode
- Leetcode Sum Root to Leaf NumbersLeetCode
- Sum Root to Leaf Numbers leetcode javaLeetCodeJava
- Leetcode 1 two sumLeetCode
- Leetcode-Two SumLeetCode
- Two Sum leetcode javaLeetCodeJava
- LeetCode | 1 Two SumLeetCode
- Two Pirates - 2
- Leetcode 165 Compare Version NumbersLeetCode
- Leetcode 967 Numbers With Same Consecutive DifferencesLeetCode
- LeetCode- Count Numbers with Unique DigitsLeetCodeGit
- leetcode刷題--Compare Version NumbersLeetCode
- [LeetCode]1.Two SumLeetCode
- LeetCode----1. Two SumLeetCode
- LeetCode 1.Two NumsLeetCode
- LeetCode1:Two SumLeetCode
- Leetcode Divide Two IntegersLeetCodeIDE