Как корректно сделать сортировку списка?

Есть вот такой вот интерфейс. В нем определил функцию сортировки, которая должна сортировать имена по первой букве. Это односвязный линейный список, подскажите пожалуйста как правильно написать функцию сортировки , правильно переставляя указатели?

#pragma once
#include <string>
using namespace std;
class NOTE
{
private:
    string name;//Имя Фамилия
    string phone;//Номер телефона
    string birthday;//Дата рождения
public:
    NOTE();//Конструктор по умолчанию
    NOTE(string n, string p, string b);//Конструктор 
    string GetName();//Получение значения имени
    string GetPhone();//Получение значения номера телефона
    string GetBirthdat();//Получение значения дня рождения
    void SetName(string n);//Установка Имени
    void SetPhone(string p);//Установка номера телефона
    void SetBirthday(string b);//Установка Дня Рождения
};



#pragma once
#include "Note.h"
class Node//Класс узла
{
    friend class Contact;//Делаем класс дружественным для класса Contact
private:
    Node(NOTE data, Node* next = nullptr) // конструктор ноды присваивание значения и адреса
    {
        this->data = data;//Указатель на данные
        this->next = next;//Указатель на следующий элемент 

    };
    NOTE data; // Поле данных, содержащее данные типа NOTE
    Node* next; // Указатель на следующий элемент
public:
};



#pragma once
#include "Note.h"
#include "Node.h"
class Contact
{
private:
    
    int Size;//Рамзер списка
    Node* head; //Голова списка первый элемент
public:
    Contact();
    ~Contact();
    int GetSize() { return Size; };//Получение размера списка
    void DeleteHead();//Удаление первого элемента
    void DeleteElem(int index);//Удаление любого из элементов, кроме первого
    void AddElem(NOTE data); //Добавление элемента в конец списка
    void Сlear();//Очистка списка
    NOTE& operator[] (const int index);//Поиск элемента по индексу
    void Sortt(int choice);//Сортировка элементов
    int wordtonum(string fword);
};

Попытался сам написать методом пузрька, но ничего не вышло. Дайте мысль)

void Contact::Sortt(int choice)
{
    Node*a=head;
    Node* b = NULL;
    Node* c = NULL;
    int h = 0;
    for  (int i = 0; i < Size - 1; i++)
        for (int j = 0; j < Size - i - 1; j++)
        {
            if (a->data.GetName()[h] > a->next->data.GetName[h])
            {
                b = a->next;//2 элемент
                
            }
                
        }

}

Ответы (0 шт):