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...