i forgot to mention a different method. instead of storing the normals per vertex, the normals simply could be part of the triangle struct.

so you would have a list of normals (like the list of uvs) and triangles would store 3 additional indices like that:

vertex1 vertex2 vertex3 uv1 uv2 uv3 normal1 normal2 normal3 material

i think this would be the best and simplest method...