Skip to content

Commit 2fc30f3

Browse files
committed
2024-07-19 v. 6.2.3: added "61. Rotate List"
1 parent 25107d5 commit 2fc30f3

25 files changed

+81
-21
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -488,3 +488,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
488488
| 56. Merge Intervals | [Link](https://leetcode.com/problems/merge-intervals/) | [Link](./lib/medium/56_merge_intervals.rb) |
489489
| 57. Insert Interval | [Link](https://leetcode.com/problems/insert-interval/) | [Link](./lib/medium/57_insert_interval.rb) |
490490
| 59. Spiral Matrix II | [Link](https://leetcode.com/problems/spiral-matrix-ii/) | [Link](./lib/medium/59_spiral_matrix_ii.rb) |
491+
| 61. Rotate ListII | [Link](https://leetcode.com/problems/rotate-list/) | [Link](./lib/medium/61_rotate_list.rb) |

leetcode-ruby.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'English'
55
::Gem::Specification.new do |s|
66
s.required_ruby_version = '>= 3.0'
77
s.name = 'leetcode-ruby'
8-
s.version = '6.2.2'
8+
s.version = '6.2.3'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
1111
s.executable = 'leetcode-ruby'

lib/common/linked_list.rb

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def self.from_array(values)
2121
list.next = ::ListNode.new(value)
2222
list = list.next
2323
end
24+
2425
head
2526
end
2627

lib/medium/61_rotate_list.rb

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../common/linked_list'
4+
5+
# https://leetcode.com/problems/rotate-list/
6+
# @param {ListNode} head
7+
# @param {Integer} k
8+
# @return {ListNode}
9+
def rotate_right(head, k)
10+
size = 0
11+
p = head
12+
13+
until p.nil?
14+
p = p.next
15+
size += 1
16+
end
17+
18+
return head if size < 2 || size == k
19+
20+
places = k > size ? k % size : k
21+
22+
return head if places.zero?
23+
24+
div = head
25+
(0...(size - places - 1)).each { |_| div = div&.next }
26+
27+
old_head = head
28+
head = div&.next
29+
div&.next = nil
30+
last = head
31+
32+
last = last&.next until last&.next.nil?
33+
last&.next = old_head
34+
35+
head
36+
end

test/easy/test_100_same_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/100_same_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/100_same_tree'
66
require 'minitest/autorun'
77

88
class SameTreeTest < ::Minitest::Test

test/easy/test_101_symmetric_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/101_symmetric_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/101_symmetric_tree'
66
require 'minitest/autorun'
77

88
class SymmetricTreeTest < ::Minitest::Test

test/easy/test_104_maximum_depth_of_binary_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/104_maximum_depth_of_binary_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/104_maximum_depth_of_binary_tree'
66
require 'minitest/autorun'
77

88
class MaximumDepthOfBinaryTreeTest < ::Minitest::Test

test/easy/test_108_convert_sorted_array_to_binary_search_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/108_convert_sorted_array_to_binary_search_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/108_convert_sorted_array_to_binary_search_tree'
66
require 'minitest/autorun'
77

88
class ConvertSortedArrayToBinarySearchTreeTest < ::Minitest::Test

test/easy/test_110_balanced_binary_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/110_balanced_binary_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/110_balanced_binary_tree'
66
require 'minitest/autorun'
77

88
class BalancedBinaryTreeTest < ::Minitest::Test

test/easy/test_111_minimum_depth_of_binary_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/111_minimum_depth_of_binary_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/111_minimum_depth_of_binary_tree'
66
require 'minitest/autorun'
77

88
class MinimumDepthOfBinaryTreeTest < ::Minitest::Test

test/easy/test_112_path_sum.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/112_path_sum'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/112_path_sum'
66
require 'minitest/autorun'
77

88
class PathSumTest < ::Minitest::Test

test/easy/test_141_linked_list_cycle.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/141_linked_list_cycle'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/easy/141_linked_list_cycle'
66
require 'minitest/autorun'
77

88
class LinkedListCycleTest < ::Minitest::Test

test/easy/test_144_binary_tree_preorder_traversal.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/144_binary_tree_preorder_traversal'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/144_binary_tree_preorder_traversal'
66
require 'minitest/autorun'
77

88
class BinaryTreePreorderTraversalTest < ::Minitest::Test

test/easy/test_145_binary_tree_postorder_traversal.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/145_binary_tree_postorder_traversal'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/145_binary_tree_postorder_traversal'
66
require 'minitest/autorun'
77

88
class BinaryTreePostorderTraversalTest < ::Minitest::Test

test/easy/test_160_intersection_of_two_linked_lists.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/160_intersection_of_two_linked_lists'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/easy/160_intersection_of_two_linked_lists'
66
require 'minitest/autorun'
77

88
class IntersectionOfTwoLinkedListsTest < ::Minitest::Test

test/easy/test_203_remove_linked_list_elements.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/203_remove_linked_list_elements'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/easy/203_remove_linked_list_elements'
66
require 'minitest/autorun'
77

88
class RemoveLinkedListElementsTest < ::Minitest::Test

test/easy/test_2236_root_equals_sum_of_children.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/2236_root_equals_sum_of_children'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/2236_root_equals_sum_of_children'
66
require 'minitest/autorun'
77

88
class RootEqualsSumOfChildrenTest < ::Minitest::Test

test/easy/test_2239_find_closest_number_to_zero.rb

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
require_relative '../test_helper'
44
require_relative '../../lib/easy/2239_find_closest_number_to_zero'
5-
require_relative '../../lib/common/binary_tree'
65
require 'minitest/autorun'
76

87
class FindClosestNumberToZeroTest < ::Minitest::Test

test/easy/test_2331_evaluate_boolean_binary_tree.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/2331_evaluate_boolean_binary_tree'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/2331_evaluate_boolean_binary_tree'
66
require 'minitest/autorun'
77

88
class EvaluateBooleanBinaryTreeTest < ::Minitest::Test

test/easy/test_83_remove_duplicates_from_sorted_list.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/83_remove_duplicates_from_sorted_list'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/easy/83_remove_duplicates_from_sorted_list'
66
require 'minitest/autorun'
77

88
class RemoveDuplicatesFromSortedListTest < ::Minitest::Test

test/easy/test_94_binary_tree_inorder_traversal.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/easy/94_binary_tree_inorder_traversal'
54
require_relative '../../lib/common/binary_tree'
5+
require_relative '../../lib/easy/94_binary_tree_inorder_traversal'
66
require 'minitest/autorun'
77

88
class BinaryTreeInorderTraversalTest < ::Minitest::Test

test/medium/test_19_remove_nth_node_from_end_of_list.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/medium/19_remove_nth_node_from_end_of_list'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/medium/19_remove_nth_node_from_end_of_list'
66
require 'minitest/autorun'
77

88
class RemoveNthNodeFromEndOfListTest < ::Minitest::Test

test/medium/test_24_swap_nodes_in_pairs.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/medium/24_swap_nodes_in_pairs'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/medium/24_swap_nodes_in_pairs'
66
require 'minitest/autorun'
77

88
class SwapNodesInPairsTest < ::Minitest::Test

test/medium/test_2_add_two_numbers.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

33
require_relative '../test_helper'
4-
require_relative '../../lib/medium/2_add_two_numbers'
54
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/medium/2_add_two_numbers'
66
require 'minitest/autorun'
77

88
class AddTwoNumbersTest < ::Minitest::Test

test/medium/test_61_rotate_list.rb

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/common/linked_list'
5+
require_relative '../../lib/medium/61_rotate_list'
6+
require 'minitest/autorun'
7+
8+
class RotateListTest < ::Minitest::Test
9+
def test_default
10+
assert(
11+
::ListNode.are_equals(
12+
::ListNode.from_array([4, 5, 1, 2, 3]),
13+
rotate_right(::ListNode.from_array([1, 2, 3, 4, 5]), 2)
14+
)
15+
)
16+
assert(
17+
::ListNode.are_equals(
18+
::ListNode.from_array([2, 0, 1]),
19+
rotate_right(::ListNode.from_array([0, 1, 2]), 4)
20+
)
21+
)
22+
end
23+
end

0 commit comments

Comments
 (0)