Реализация сортировки пузырьком двусвязного ацикличного списка с++

#include <iostream>

using namespace std;

struct Node{
    int value;
    Node* prev;
    Node* next;
public:
    Node(int val): value(val),prev(nullptr),next(nullptr){};
};

struct List{
    Node* Head;
    Node* Tail;
public:
    List():Head(nullptr), Tail(nullptr){};
    void Add(int n){
        Node* temp = new Node(n);
        
        if(Head!=nullptr){
            Tail->next = temp;
            temp->prev = Tail;
            Tail = temp;
        }else{
            Head = temp;
            Tail = temp;
            
        }
    };
    void out(){
    Node* point = Head;
    while(point){
            cout << point->value << " ";
            point = point->next;
    }
          
        
    };
    ~List(){
        while(Head){ 
        Tail = Head->next;            
         delete Head;                   
         Head = Tail;     
        }
    }

    
    
  
    Node* getHead(){
        return Head;
    };
   
    Node* getTail(){
        return Tail;
    };
   void swap_Behind(Node* a, Node* b){
     
       
        a->next = b->next;
        b->next = a;
        b->prev = a->prev;
        
       if(a->prev) a->prev->next = b;
       a->prev =b;
       
    };


};
 
   void swap_Behind(Node* a, Node* b){
     
        
        a->next = b->next;
        b->next = a;
        b->prev = a->prev;
        
       if(a->prev) a->prev->next = b;
       a->prev =b;
       
    };
    

int main(){
 

    List ls;
    ls.Add(1);
    ls.Add(3);
    ls.Add(8);
    ls.Add(1);
    ls.Add(9);
    ls.Add(8);
 
  
    ls.out();

    cout<<"-------------";
    
   bool flag = true;
   
    Node* point = ls.getHead();
    while(flag){
        point = ls.getHead();
        flag = false;
        while(point->next){
           // cout<<point->value;
            if(point->value>point->next->value){
                ls.out();
                cout<<"\n";
                swap_Behind(point,point->next);
                flag = true;
            }
            point = point->next;
        }
        
    }
 
    
    
    
    ls.out();
    return 0;
}

Реализация сортировки пузырьком двусвязного ацикличного списка с++. Сортировка работает нестабильно. К примеру, на значениях (1 3 8 1 3 8) вылетает ошибка Segmentation fault (core dumped), на значениях (1 3 8 1 6 8) в последней итерации куда-то исчезает элемент. Не могу найти ошибку. Помогите пожалуйста!!!


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