Во-первых, у вас структура весьма странная. Вообще непонятно, что у вас там за пики, почему при добавлении ребра участвует data в вершинах.
Вместо собственных list-ов, вы храните ребра в vector. По производительности будет даже быстрее из-за локальности. А добавление в вектор один раз кучи элементов работает за линейную сложность. Но если вам надо собственную реализацию, то вы всегда добавляйте в начало списка. Потому что рекурсивный поиск конца списка и добавление туда - это квадратичный алгоритм на ровном месте.
Опишите ваш алгоритм словами, что должна делать функция findLength? Искать позицию заданного элемента в списке?
Похоже у вас граф взвешанный, и единственный доступный вам способ в таком графе - это поиск кратчайших путей от каждой вершины до каждой. Тут хорошо подойдет алгоритм
Флойда. Или, если у вас граф разряжен -
Дейкстры.