#include #include using namespace std; #include "Conjunto.h" Conjunto::Nodo::Nodo(int d, Nodo * s) : dato{d}, siguiente{s} { } Conjunto::Conjunto() : primero{nullptr} { } void Conjunto::insertar(int dato) { if (primero == nullptr || dato < primero->dato) primero = new Nodo(dato, primero); else { bool insertado = false; for (Nodo * actual = primero; actual->dato != dato && ! insertado; actual = actual->siguiente) if (actual->siguiente == nullptr || dato < actual->siguiente->dato) { actual->siguiente = new Nodo(dato, actual->siguiente); insertado = true; } } } void Conjunto::mostrar() const { cout << "["; for (Nodo * actual = primero; actual != nullptr; actual = actual->siguiente) { cout << actual->dato; if (actual->siguiente != nullptr) cout << ", "; } cout << "]"; } void Conjunto::insertarAlFinal(Nodo * & ultimo, int dato) { if (primero == nullptr) { primero = new Nodo(dato, nullptr); ultimo = primero; } else { ultimo->siguiente = new Nodo(dato, nullptr); ultimo = ultimo->siguiente; } } Conjunto Conjunto::diferenciaSimetrica(const Conjunto & c2) const { Conjunto c3; Nodo * n1 = primero, * n2 = c2.primero, * ultimo; while (n1 != nullptr || n2 != nullptr) if (n1 == nullptr || (n2 != nullptr && n2->dato < n1->dato)) { c3.insertarAlFinal(ultimo, n2->dato); n2 = n2->siguiente; } else if (n2 == nullptr || n1->dato < n2->dato) { c3.insertarAlFinal(ultimo, n1->dato); n1 = n1->siguiente; } else { n1 = n1->siguiente; n2 = n2->siguiente; } return c3; }