Skip to content

Instantly share code, notes, and snippets.

@eebasadre20
Created March 28, 2020 10:09
Show Gist options
  • Save eebasadre20/5295d83b891a4c35c778f60602055ea5 to your computer and use it in GitHub Desktop.
Save eebasadre20/5295d83b891a4c35c778f60602055ea5 to your computer and use it in GitHub Desktop.
LeetCode - Remove nth node form end of list
# Definition for singly-linked list.
# class ListNode
# attr_accessor :val, :next
# def initialize(val)
# @val = val
# @next = nil
# end
# end
# @param {ListNode} head
# @param {Integer} n
# @return {ListNode}
def remove_nth_from_end(head, n)
node_length = linkedlist_length(head)
counter = node_length
current_node = head
previous_node = nil
loop do
if counter == n
delete_nth_node(previous_node, current_node)
break
end
if !current_node.next.nil?
previous_node = current_node
current_node = current_node.next
end
counter -= 1
end
head
end
def delete_nth_node(previous_node, current_node)
if !current_node.next.nil?
current_node.val = current_node.next.val
current_node.next = current_node.next.next
else
current_node.val = nil
current_node.next = nil
previous_node.next = nil if !previous_node.nil?
end
end
def linkedlist_length(head, length = 0)
return length if head.nil?
length += 1
linkedlist_length(head.next, length)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment