лаб.5 доп.13

← разместить еще код

Расшаренный код:

#include <iostream>
using namespace std;

struct Node
{
    int data;

    Node *next;
};

Node *head = NULL;
Node *tail = NULL;

void push_back(int d) // добавление элемента в конец списка
{
    Node *newNode = new Node;
    newNode->data = d;
    newNode->next = NULL;
    if (tail == NULL)
        head = newNode;
    else
        tail->next = newNode;
    tail = newNode;
}


void push_first(int d) // добавление элемента в начало списка
{
    Node *newNode = new Node;
    newNode->data = d;
    newNode->next = head;
    if (head == NULL) tail = newNode;
    head = newNode;
}


void pop_back() // удаление элемента из начала списка
{
    Node *current = head;
    while (1){
        if (current->next->next == NULL) break;
        current = current->next;
    }
    current->next = NULL;
    tail = current;
}


void pop_first() // удаление элемента из начала списка
{
    Node *current = head;
    head = current->next;
}


void display() // вывод на экран
{
    Node *current = head;
    while(current)
    {
        cout << current->data << endl;
        current = current->next;
    }
}

int main()
{
    push_back(13);
    push_back(1);
    push_back(7);
    push_back(3);
    push_first(12);
    push_back(11);
    display();
    cout << endl << endl;

    pop_first();
    display();
    cout << endl << endl;

    push_first(14);
    display();
    cout << endl << endl;

    pop_back();
    display();
    cout << endl << endl;

    int index;
    cin >> index;
    cout << endl << endl;

    int i = 0;
    Node *current = head;
    while(i + 1 < index)
    {
        current = current->next;
        i++;
    }
    int buf = current->data;
    current->data = current->next->data;
    current->next->data = buf;

    display();

    return 0;
}