Skip to content

Commit 07821d2

Browse files
authored
Merge pull request #661 from fartem/19_Remove_Nth_Node_From_End_of_List
2024-07-04 v. 6.0.4: added "19. Remove Nth Node From End of List"
2 parents 3403510 + 7862ae2 commit 07821d2

File tree

4 files changed

+71
-1
lines changed

4 files changed

+71
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,3 +469,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
469469
| 15. 3Sum | [Link](https://leetcode.com/problems/3sum/) | [Link](./lib/medium/15_3sum.rb) |
470470
| 16. 3Sum Closest | [Link](https://leetcode.com/problems/3sum-closest/) | [Link](./lib/medium/16_3sum_closest.rb) |
471471
| 17. Letter Combinations of a Phone Number | [Link](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) | [Link](./lib/medium/17_letter_combinations_of_a_phone_number.rb) |
472+
| 19. Remove Nth Node From End of List | [Link](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | [Link](./lib/medium/19_remove_nth_node_from_end_of_list.rb) |

leetcode-ruby.gemspec

Lines changed: 1 addition & 1 deletion
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.0.3'
8+
s.version = '6.0.4'
99
s.license = 'MIT'
1010
s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE]
1111
s.executable = 'leetcode-ruby'
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
# https://leetcode.com/problems/remove-nth-node-from-end-of-list/
4+
# @param {ListNode} head
5+
# @param {Integer} n
6+
# @return {ListNode}
7+
def remove_nth_from_end(head, n)
8+
nodes = []
9+
curr = head
10+
11+
until curr.nil?
12+
nodes << curr
13+
curr = curr.next
14+
end
15+
16+
index = nodes.length - n
17+
prev = index.zero? ? nil : nodes[index - 1]
18+
nxt = index == nodes.length - 1 ? nil : nodes[index + 1]
19+
20+
if prev.nil?
21+
head = nxt
22+
else
23+
prev.next = nxt
24+
end
25+
26+
head
27+
end
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../test_helper'
4+
require_relative '../../lib/medium/19_remove_nth_node_from_end_of_list'
5+
require_relative '../../lib/common/linked_list'
6+
require 'minitest/autorun'
7+
8+
class RemoveNthNodeFromEndOfListTest < ::Minitest::Test
9+
def test_default
10+
assert(
11+
::ListNode.are_equals(
12+
::ListNode.from_array(
13+
[1, 2, 3, 5]
14+
),
15+
remove_nth_from_end(
16+
::ListNode.from_array(
17+
[1, 2, 3, 4, 5]
18+
),
19+
2
20+
)
21+
)
22+
)
23+
assert(
24+
::ListNode.are_equals(
25+
::ListNode.from_array([]),
26+
remove_nth_from_end(
27+
::ListNode.from_array([1]),
28+
1
29+
)
30+
)
31+
)
32+
assert(
33+
::ListNode.are_equals(
34+
::ListNode.from_array([1]),
35+
remove_nth_from_end(
36+
::ListNode.from_array([1, 2]),
37+
1
38+
)
39+
)
40+
)
41+
end
42+
end

0 commit comments

Comments
 (0)