diff --git a/README.md b/README.md index 10b31740..8e73df40 100644 --- a/README.md +++ b/README.md @@ -520,3 +520,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 142. Linked List Cycle II | [Link](https://leetcode.com/problems/linked-list-cycle-ii/) | [Link](./lib/medium/142_linked_list_cycle_ii.rb) | [Link](./test/medium/test_142_linked_list_cycle_ii.rb) | | 143. Reorder List | [Link](https://leetcode.com/problems/reorder-list/) | [Link](./lib/medium/143_reorder_list.rb) | [Link](./test/medium/test_143_reorder_list.rb) | | 146. LRU Cache | [Link](https://leetcode.com/problems/lru-cache/) | [Link](./lib/medium/146_lru_cache.rb) | [Link](./test/medium/test_146_lru_cache.rb) | +| 147. Insertion Sort List | [Link](https://leetcode.com/problems/insertion-sort-list/) | [Link](./lib/medium/147_insertion_sort_list.rb) | [Link](./test/medium/test_147_insertion_sort_list.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 6d9f521b..9ecaece1 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '6.5.4' + s.version = '6.5.5' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/147_insertion_sort_list.rb b/lib/medium/147_insertion_sort_list.rb new file mode 100644 index 00000000..309b0f98 --- /dev/null +++ b/lib/medium/147_insertion_sort_list.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require_relative '../common/linked_list' + +# https://leetcode.com/problems/insertion-sort-list/ +# @param {ListNode} head +# @return {ListNode} +def insertion_sort_list(head) + result = ::ListNode.new + curr = head + + while curr + prev = result + + prev = prev.next while prev.next && prev.next.val <= curr.val + + nxt = curr.next + curr.next = prev.next + prev.next = curr + curr = nxt + end + + result.next +end diff --git a/test/medium/test_147_insertion_sort_list.rb b/test/medium/test_147_insertion_sort_list.rb new file mode 100644 index 00000000..336fa3f7 --- /dev/null +++ b/test/medium/test_147_insertion_sort_list.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/common/linked_list' +require_relative '../../lib/medium/147_insertion_sort_list' +require 'minitest/autorun' + +class InsertionSortListTest < ::Minitest::Test + def test_default_one + assert( + ::ListNode.are_equals( + ::ListNode.from_array( + [1, 2, 3, 4] + ), + insertion_sort_list( + ::ListNode.from_array( + [4, 2, 1, 3] + ) + ) + ) + ) + end + + def test_default_two + assert( + ::ListNode.are_equals( + ::ListNode.from_array( + [-1, 0, 3, 4, 5] + ), + insertion_sort_list( + ::ListNode.from_array( + [-1, 5, 3, 4, 0] + ) + ) + ) + ) + end +end