¿¡?¿!? ...¿cómo sin crear un array?, pero si el primer argumento debe ser por c..jones el puntero a un array!, ósea, que la lista debe ser un array de la estructura de datos (no entiendo a que te refieres con eso de: "sin crear un array"). Por otro lado, no necesitas crear una "nueva" lista (si te refieres al array), al menos por lo que a 'qsort' respecta. Sólo necesitas pasarle la dirección del array, el número de registros, el tamaño de la estructura, y el puntero del procedimiento para reorganizar con algún criterio los datos que se envíen. Este último es muy parecido a un procedimiento de ventana, y el segundo argumento ya te da el puntero al array de datos para procesarlo como quieras.
No puedo aventurarme a decirte mucho más con tan poca información, pero por lo que me cuentas, no se si es que no sabes como mantener accesible la famosa lista para todas las funciones que pretendes utilizar con ella, o es que deduces (erróneamente) que cuando declaras un puntero estás creando una nueva lista.