Skip to content

Commit e262948

Browse files
committed
2023-04-24 v. 0.0.7: added "21. Merge Two Sorted Lists"
1 parent 931d949 commit e262948

File tree

6 files changed

+96
-8
lines changed

6 files changed

+96
-8
lines changed

.rubocop.yml

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Metrics/MethodLength:
2323
Enabled: false
2424
Metrics/CyclomaticComplexity:
2525
Enabled: false
26+
Metrics/PerceivedComplexity:
27+
Enabled: false
2628

2729
Naming/PredicateName:
2830
Enabled: false

README.md

+8-7
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
1212

1313
### Easy
1414

15-
| Name | Link to LeetCode | Link to solution |
16-
|---------------------------|--------------------------------------------------------------|------------------------------------------------|
17-
| 1. Two Sum | [Link](https://leetcode.com/problems/two-sum/) | [Link](./lib/easy/1_two_sum.rb) |
18-
| 9. Palindrome Number | [Link](https://leetcode.com/problems/palindrome-number/) | [Link](./lib/easy/9_palindrome_number.rb) |
19-
| 13. Roman to Integer | [Link](https://leetcode.com/problems/roman-to-integer/) | [Link](./lib/easy/13_roman_to_integer.rb) |
20-
| 14. Longest Common Prefix | [Link](https://leetcode.com/problems/longest-common-prefix/) | [Link](./lib/easy/14_longest_common_prefix.rb) |
21-
| 20. Valid Parentheses | [Link](https://leetcode.com/problems/valid-parentheses/) | [Link](./lib/easy/20_valid_parentheses.rb) |
15+
| Name | Link to LeetCode | Link to solution |
16+
|----------------------------|---------------------------------------------------------------|-------------------------------------------------|
17+
| 1. Two Sum | [Link](https://leetcode.com/problems/two-sum/) | [Link](./lib/easy/1_two_sum.rb) |
18+
| 9. Palindrome Number | [Link](https://leetcode.com/problems/palindrome-number/) | [Link](./lib/easy/9_palindrome_number.rb) |
19+
| 13. Roman to Integer | [Link](https://leetcode.com/problems/roman-to-integer/) | [Link](./lib/easy/13_roman_to_integer.rb) |
20+
| 14. Longest Common Prefix | [Link](https://leetcode.com/problems/longest-common-prefix/) | [Link](./lib/easy/14_longest_common_prefix.rb) |
21+
| 20. Valid Parentheses | [Link](https://leetcode.com/problems/valid-parentheses/) | [Link](./lib/easy/20_valid_parentheses.rb) |
22+
| 21. Merge Two Sorted Lists | [Link](https://leetcode.com/problems/merge-two-sorted-lists/) | [Link](./lib/easy/21_merge_two_sorted_lists.rb) |

leetcode-ruby.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ require 'English'
33
::Gem::Specification.new do |s|
44
s.required_ruby_version = '>= 3.0'
55
s.name = 'leetcode-ruby'
6-
s.version = '0.0.6.4'
6+
s.version = '0.0.7'
77
s.license = 'MIT'
88
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
99
s.executable = 'leetcode-ruby'

lib/common/linked_list.rb

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# LinkedList implementation for this project
2+
class ListNode
3+
# @param val {Integer}
4+
# @param _next {ListNode}
5+
def initialize(val = 0, _next = nil)
6+
@val = val
7+
@next = _next
8+
end
9+
10+
# @param values {Array}
11+
def self.from_array(values)
12+
return if values.empty?
13+
14+
list = ListNode.new(values.first)
15+
head = list
16+
values.drop(1).each do |value|
17+
list.next = ListNode.new(value)
18+
list = list.next
19+
end
20+
head
21+
end
22+
23+
# @param other {LinkedList}
24+
def ==(other)
25+
are_equals(self, other)
26+
end
27+
28+
# @param curr {ListNode}
29+
# @param other {ListNode}
30+
def are_equals(curr, other)
31+
return true if curr.nil? && other.nil?
32+
return false if curr.nil? || other.nil?
33+
34+
curr.val == other.val && are_equals(curr.next, other.next)
35+
end
36+
37+
attr_accessor :val, :next
38+
end

lib/easy/21_merge_two_sorted_lists.rb

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require_relative '../common/linked_list'
2+
3+
# @param {ListNode} list1
4+
# @param {ListNode} list2
5+
# @return {ListNode}
6+
def merge_two_lists(list1, list2)
7+
return list1 if list2.nil?
8+
return list2 if list1.nil?
9+
10+
min = list1.val > list2.val ? list2 : list1
11+
max = list1.val > list2.val ? list1 : list2
12+
result = ListNode.new(min.val)
13+
min = min.next
14+
head = result
15+
while !min.nil? && !max.nil?
16+
if min.val > max.val
17+
result.next = ListNode.new(max.val)
18+
max = max.next
19+
else
20+
result.next = ListNode.new(min.val)
21+
min = min.next
22+
end
23+
result = result.next
24+
end
25+
result.next = min unless min.nil?
26+
result.next = max unless max.nil?
27+
head
28+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require_relative '../../lib/easy/21_merge_two_sorted_lists'
2+
require 'minitest/autorun'
3+
4+
class ValidParenthesesTest < Minitest::Test
5+
def test_default
6+
merge_two_lists(
7+
ListNode.from_array([1, 2, 4]),
8+
ListNode.from_array([1, 3, 4]),
9+
) == ListNode.from_array([1, 1, 2, 3, 4, 4])
10+
merge_two_lists(
11+
ListNode.from_array([]),
12+
ListNode.from_array([]),
13+
) == nil
14+
merge_two_lists(
15+
ListNode.from_array([]),
16+
ListNode.from_array([0]),
17+
) == ListNode.from_array([0])
18+
end
19+
end

0 commit comments

Comments
 (0)