Реализация сортировки пузырьком двусвязного ацикличного списка с++
#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) в последней итерации куда-то исчезает элемент. Не могу найти ошибку. Помогите пожалуйста!!!