aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-08-11 22:44:49 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-08-11 22:44:49 +0100
commit023d3d0dc9993977da8ebcdc96da9a271d272f96 (patch)
tree121ab77f131eb3dbffaf7d478a8d973b5dcfe0a6
parentb6e93a033aa46cd8349964ae8a60d1d411fa49fe (diff)
downloadalgorithms-023d3d0dc9993977da8ebcdc96da9a271d272f96.tar.gz
algorithms-023d3d0dc9993977da8ebcdc96da9a271d272f96.tar.bz2
algorithms-023d3d0dc9993977da8ebcdc96da9a271d272f96.zip
Add a TBC solution to leetcode
-rw-r--r--leetcode/solutions.org83
1 files changed, 82 insertions, 1 deletions
diff --git a/leetcode/solutions.org b/leetcode/solutions.org
index b8748ce..d78f875 100644
--- a/leetcode/solutions.org
+++ b/leetcode/solutions.org
@@ -16,7 +16,7 @@ bool containsDuplicate(vector<int> &nums)
{
std::sort(nums.begin(), nums.end());
const size_t n = nums.size() - 1;
- for (const size_t i = 0; i < n; ++i)
+ for (const size_t i = 0; i < n - 1; ++i)
if (nums[i] == nums[i + 1])
return true;
return false;
@@ -590,4 +590,85 @@ vector<int> dailyTemperatures(vector<int> &temperatures)
return days;
}
#+end_src
+* Linked Lists
+** TODO (#2) Add two numbers
+Given two linked lists representing the digits of a number in reverse
+order, return their sum.
+#+begin_src c++ :tangle 2.cpp :comments link
+#include <bits/stdc++.h>
+using namespace std;
+
+struct ListNode
+{
+ int val;
+ ListNode *next;
+
+ ListNode() : val{0}, next{nullptr}
+ {
+ }
+
+ ListNode(int val) : val{val}, next{nullptr}
+ {
+ }
+
+ ListNode(int val, ListNode *next) : val{val}, next{next}
+ {
+ }
+
+ ~ListNode()
+ {
+ if (next)
+ delete next;
+ }
+};
+
+ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
+{
+ if (!(l1 && l2) ||
+ (l1->val == l2->val && l1->val == 0 && !(l1->next || l2->next)))
+ return l1;
+
+ int carry = 0;
+ int sum = l1->val + l2->val;
+
+ ListNode *root = new ListNode(sum % 10);
+ ListNode *end = root;
+
+ carry = sum / 10;
+ l1 = l1->next;
+ l2 = l2->next;
+
+ for (; l1 && l2; l1 = l1->next, l2 = l2->next)
+ {
+ sum = l1->val + l2->val + carry;
+ carry = sum / 10;
+ sum %= 10;
+
+ auto node = new ListNode(sum, nullptr);
+ end->next = node;
+ end = node;
+ }
+
+ if (l1 || l2)
+ {
+ auto remaining = l1 ? l1 : l2;
+ for (; remaining; remaining = remaining->next)
+ {
+ remaining->val += carry;
+ carry = remaining->val / 10;
+ remaining->val %= 10;
+ end->next = remaining;
+ end = remaining;
+ }
+ }
+
+ if (carry != 0)
+ {
+ auto node = new ListNode(carry, nullptr);
+ end->next = node;
+ }
+
+ return root;
+}
+#+end_src
* Blind 75