Cod sursa(job #3252186)

Utilizator razvan_anghel_83Anghel Razvan-Alexandru razvan_anghel_83 Data 28 octombrie 2024 19:42:14
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.68 kb
//
// Created by Test on 28/10/2024.
//

#include "LinkedList.h"


void LinkedList::insertAtBeginning(const int value) {

    Node* newNode = new Node();
    newNode->data = value;
    newNode->next = first;
    first = newNode;
}

void LinkedList::insertAtEnd(const int value) {

    Node* newNode = new Node();
    newNode->data = value;
    newNode->next = nullptr;

    if ( !first ) {  // if list is empty

        first = newNode;
        return;
    }

    Node* temp_node = first;
    while (temp_node->next)
        temp_node = temp_node->next;

    temp_node->next = newNode;
}

void LinkedList::insertAtPosition(const int value, int position) {

    if ( position < 1 ) {

        cout << "Position should be >= 1." << endl;
        return;
    }

    if ( position == 1 ) {

        insertAtBeginning(value);
        return;
    }

    Node* newNode = new Node();
    newNode->data = value;


    Node* temp = first;
    for (int i = 1; i < position - 1 && temp; ++i)
        temp = temp->next;


    if ( !temp ) {

        cout << "Position out of range." << endl;
        delete newNode;
        return;
    }

    newNode->next = temp->next;
    temp->next = newNode;
}

void LinkedList::deleteFromBeginning() {

    if ( !first ) {

        cout << "List is empty." << endl;
        return;
    }

    Node* temp_node = first;
    first = first->next;
    delete temp_node;
}

void LinkedList::deleteFromEnd() {
    if ( !first ) {

        cout << "List is empty." << endl;
        return;
    }

    if ( !first->next ) {

        delete first;
        first = nullptr;
        return;
    }


    Node* temp = first;
    while ( temp->next->next )
        temp = temp->next;


    delete temp->next;
    temp->next = nullptr;
}

void LinkedList::deleteFromPosition(int position) {

    if (position < 1) {

        cout << "Position should be >= 1." << endl;
        return;
    }

    if ( position == 1 ) {

        deleteFromBeginning();
        return;
    }

    Node* temp = first;
    for (int i = 1; i < position - 1 && temp; ++i)
        temp = temp->next;


    if (!temp || !temp->next) {
        cout << "Position out of range." << endl;
        return;
    }

    Node* nodeToDelete = temp->next;
    temp->next = temp->next->next;
    delete nodeToDelete;
}

void LinkedList::display() const {

    if ( !first ) {

        cout << "List is empty." << endl;
        return;
    }

    const Node* temp_node = first;

    while (temp_node) {

        cout << temp_node->data << " -> ";
        temp_node = temp_node->next;
    }

    cout << "NULL" << endl;
}