diff --git a/2. Add Two Numbers/Solution.java b/2. Add Two Numbers/Solution.java new file mode 100644 index 0000000..52fe361 --- /dev/null +++ b/2. Add Two Numbers/Solution.java @@ -0,0 +1,36 @@ +/** + * 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 dummy = new ListNode(); + var cur = dummy; + + int carry = 0; + + while (carry != 0 || l1 != null || l2 != null) { + int v1 = (l1 != null) ? l1.val : 0; + int v2 = (l2 != null) ? l2.val : 0; + + int val = v1 + v2 + carry; + carry = val / 10; + val = val % 10; + + cur.next = new ListNode(val); + + cur = cur.next; + + l1 = (l1 != null) ? l1.next : null; + l2 = (l2 != null) ? l2.next : null; + } + + return dummy.next; + } +} diff --git a/2. Add Two Numbers/solution.cpp b/2. Add Two Numbers/solution.cpp new file mode 100644 index 0000000..46927bb --- /dev/null +++ b/2. Add Two Numbers/solution.cpp @@ -0,0 +1,34 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode() : val(0), next(nullptr) {} + * ListNode(int x) : val(x), next(nullptr) {} + * ListNode(int x, ListNode *next) : val(x), next(next) {} + * }; + */ +class Solution { +public: + ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { + ListNode* dummy = new ListNode(0); + ListNode* cur = dummy; + int carry = 0; + + while (l1 != nullptr || l2 != nullptr || carry != 0) { + int v1 = (l1 != nullptr) ? l1->val : 0; + int v2 = (l2 != nullptr) ? l2->val : 0; + + int sum = v1 + v2 + carry; + carry = sum / 10; + + cur->next = new ListNode(sum % 10); + cur = cur->next; + + if (l1 != nullptr) l1 = l1->next; + if (l2 != nullptr) l2 = l2->next; + } + + return dummy->next; + } +}; diff --git a/2. Add Two Numbers/solution.py b/2. Add Two Numbers/solution.py new file mode 100644 index 0000000..16616f1 --- /dev/null +++ b/2. Add Two Numbers/solution.py @@ -0,0 +1,26 @@ +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, val=0, next=None): +# self.val = val +# self.next = next +class Solution: + def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]: + dummy = ListNode() + cur = dummy + + carry = 0 + while l1 or l2 or carry: + v1 = l1.val if l1 else 0 + v2 = l2.val if l2 else 0 + + val = v1 + v2 + carry + + carry = val // 10 + val = val % 10 + cur.next = ListNode(val) + + cur = cur.next + l1 = l1.next if l1 else None + l2 = l2.next if l2 else None + + return dummy.next diff --git a/README.md b/README.md index 3802055..c6f2df0 100644 --- a/README.md +++ b/README.md @@ -3,5 +3,6 @@ here i've got some leetcode problems & solutions to them | **Number** | **Name** | **Difficulty** | **Solution** | | ---------- | -------- | -------------- | ------------ | | 1 | *Two Sum* | Easy | [Python](1.%20Two%20Sum/solution.py), [Java](1.%20Two%20Sum/Solution.java), [C++](1.%20Two%20Sum/solution.cpp), [C](1.%20Two%20Sum/solution.c) | +| 2 | *Add Two Numbers* | Medium | [Python](2.%20Add%20Two%20Numbers/solution.py), [Java](2.%20Add%20Two%20Numbers/Solution.java), [C++](2.%20Add%20Two%20Numbers/solution.cpp), [C](2.%20Add%20Two%20Numbers/solution.c) | | 9 | *Palindrome Number* | Easy | [Python](9.%20Palindrome%20Number/solution.py), [Java](9.%20Palindrome%20Number/Solution.java), [C++](9.%20Palindrome%20Number/solution.cpp), [C](9.%20Palindrome%20Number/solution.c) |