class Node
  attr_accessor :value, :next

  def initialize(val, next_in_line)
    @value = val
    @next  = next_in_line
  end
end

class LinkedList
  attr_accessor :head
  def initialize(val)
    # Initialize a new node at the head
    @head = Node.new(val, nil)
  end

  def add(value)
    # Traverse to the end of the list
    # And insert a new node over there with the specified value
    current      = @head
    current      = current.next until current.next.nil?
    current.next = Node.new(value, nil)
    self
  end

  def delete(val)
    current = @head
    if current.value == val
      @head = @head.next
    else
      until current.next.nil?
        current = current.next
        if current.value == val
          current.value = current.next.value || nil
          current.next  = current.next.next
        end
      end
    end
    @head
  end
end

def print_list(temp)
  current = temp.head
  i       = 1
  while current.next
    puts current.value.to_s
    current = current.next
    i      += 1
  end
  puts current.value.to_s
end

def partition_linked_temp(list, n)
  return false unless list || n
  l_start = lower = Node.new(0, nil)
  g_start = greater = Node.new(0, nil)

  current = list.head
  while current
    temp = Node.new(current.value, nil)
    if current.value <= n
      lower.next = temp
      lower      = lower.next
    else
      greater.next = temp
      greater      = greater.next
    end
    current = current.next
  end

  current = l_start
  current = current.next while current.next

  current.next = g_start.next

  l_start.next
end
