bool inorder(Node* L)
{
  // BASE CASE: empty or 1 node 
  if (L == NULL)
    return true;
  else if (L->next == NULL)
    return true;

  // RECURSIVE CASE
  // Check if the child list is inorder first
  // If not, well the whole list is not in order!
  if( !inorder(L->next) )
    return false;

  // If the child is inorder, 
  // the only thing to check is 
  //  whether the first and second nodes are in order.
  // The rest have already been check from the child list. 
  return L->data <= L->next->data; 
}