En primer lugar lo segundo: Si pones en la función L = NULL, no cambiará nada fuera de la función. De todos modos, borrar el último nodo no significa "borrar la lista". Simplemente sería borrar el nodo que tiene, y ponerlo todo a 0: elementos, primero y ultimo. E incluso si quisieras borrar la lista, tendrías que liberar la memoria con free().
Y con respecto a lo primero, no hay mucho que decir. Si quieres que esa función borre, impleméntalo. Ya en el camino verías qué comprobaciones necesitas hacer. Desde luego, si no es el único, estará de primero, último u otra posición, está claro.
El operador "==" retorna un 0 o diferente de 0, según sean diferenets o no. Por tanto, si pones "return a == b;", es como poner "return (a == b);". Primero se hace el operador ==. Por tanto, eso acabaría siendo un "return 0;" o "return 1;".
Lo que te comentaba, es que en vez de mantener tu tabla de 4x4, pongas directamente el uint64_t y trabajes con él. Luego, basta hacer un par de funciones o defines para acceder a los datos
Si no quieres, no necesitas la librería glut. Puedes usar funciones de OpenGL. Para lograr lo que gluPerspective, tienes glFrustum
Para librarte de problemas trigonométricos, por aquí hay uno que explica cómo hacer lo mismo que con gluPerspective: http://nehe.gamedev.net/article/replacement_for_gluperspective/21002/ De todos modos, te recomiendo echarle un ojo a lo que hace glFrustum, que no es demasiado complicado !