1) Полагаю оптимально предварительно отсортиоровать рёбра по весу от минимума.
2) Нужно еще хранить множество вершин. Хорошо подойдёт для этого храниние в виде "битовой карты", т.е. массива бит (массива bool): std::vector от bool, назовём массив IN(n), т.к. всё равно придётся их добавить все. n это кол-во вершин (и размер массива).
3) Также результат представится в виде множества рёбер. Можно также использовать список рёбер для представления оставного дерева.
4) Алгоритм.
Если n == 0, то возврат.
IN[0] = true; v_count = 1.
Пока v_count меньше n
Ищем первое ребро из списка, которое соединяет вершины i и j (или наоборот!), при условии IN[i] & !IN[j]: добавляем его в список-ответ, IN[j] = true, ++v_count.
ПС
А это для чего такое?
list* List = new list;
Используйте std::forward_list