Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- struct node {
- int value;
- node *next;
- };
- void push_front(node*& head, int value) //Dodanie na początku
- {
- node* temp = new node; //Tworzymy nowy wskaźnik
- temp->value = value; //przypisujemy wartość
- temp->next = head; //Przypisujemy wskaźnik na head
- head = temp; //ustawiamy na głowyny naszego tempa
- }
- void push_last(node*& head, int value) //Dodanie na końcu
- {
- node* temp = new node; //Tworzenie nowego wskaźnika
- temp->value = value; //Przypisanie wartosci do wskaznika
- node* last = head; //Stworzenie nowego wskaznika KOPIA HEAD
- while (last->next != NULL) //Tak długo dopóki nie dojdziemy do ostatniego elementu
- last = last->next;
- last->next = temp; //Przypisanie do wskaźnika ostatniego elementu wskaźnik na NOWY OSTATNI
- temp->next = NULL; //Przypisanie NOWEMU OSTATNIEMU wskaźnika NULL
- }
- void push_behind_x(node*& head, int x, int add_value) //Dodanie za wskazanym x (przy założeniu, że list i wskazywany x istnieje)
- {
- node* temp = new node; //Stworzenie nowego wskaznika
- temp->value = add_value; //Przypisanie wartosci
- node* find_x = head; //Zrobienie kopi wskaznika head
- while (find_x->value == x) //Tak długo dopóki nieznajdziemy odpowiadającej nam wartosci, po której chcemy wstawić
- find_x = find_x->next; //Po znaleznieniu wychodzimy. Powiedzmy, że mamy ciąg 1 -> 2 -> 3 -> 4.
- temp->next = find_x->next; //Nasz p wskazuje na x=2. Czyli teraz wskaznik z 2 (->3) kopiujemy do tempa (temp -> 3)
- find_x->next = temp; //A na wskazniku 2 ustawiamy wskaznik na tempa (2 -> temp -> 3)
- }
- void show(node* head) //Wyświetlenie lusty
- {
- node* temp = head; //Tworzymy kopie wskaznika (w celu edycji Kopi, a zachowaniu pierwszego wskaznika)
- while (temp != NULL) //Tak dlugo dopóki nie dojdziemy do "pustej" zmiennej
- {
- std::cout << temp->value << " ";
- temp = temp->next; //Przechodzimy do kolejnej liczby
- }
- }
- void pop_last(node*& head) //Usunięcie ostatniego
- {
- node* temp = head; //Kopia wskaźnika head, na którym będziemy operować
- if (temp == NULL) //Sprawdzenie, czy lista istneje
- std::cout << "Lista nie istnieje!\n";
- else if (temp->next == NULL) //Sprawdzenie czy lista jest jedno elementowa
- {
- head = NULL;
- delete temp;
- }
- else
- {
- while (temp->next != NULL)
- temp = temp->next; //łapie ostatni element
- node* front_temp = head;
- while (front_temp->next != temp)
- front_temp = front_temp->next; //Łapie przedostarni element
- front_temp->next = NULL; //W przedostatnim elemencie zamienia wskaznik na NULL
- delete temp; //Usuwa ostatni
- }
- }
- void pop_first(node*& head) //Usuwanie pierwszego elementu
- {
- node* temp = head; //Kopia wskaznika 1(head)(temp)->2->3
- head = head->next; //Ustawienie head na kolejny element 1 -> 2(head) -> 3
- delete temp; //Usunięcie pierwszego elementu 1(temp - > DELETE) -> 2(head) ->3
- }
- void pop_behind_x(node*& head, int x) //Usunięcie za wskazanym x
- {
- node* temp = head;
- if (temp == NULL)
- std::cout << "Lista nie istnieje, nie ma co usuwac!\n";
- else
- {
- int check = 0;
- while (temp != NULL)
- {
- if (temp->value == x)
- {
- node* front_temp = temp;
- temp = temp->next;
- if (temp->next != NULL)
- front_temp->next = temp->next;
- else
- front_temp->next = NULL;
- check++;
- }
- temp = temp->next;
- }
- if (check == 0)
- std::cout << "Podanego elementu nie znaleziono!\n";
- }
- }
- void listy()
- {
- node * head = nullptr;
- push_front(head, 7);
- push_front(head, 8);
- push_front(head, 9);
- push_front(head, 10);
- show(head);
- std::cout << "\n\nUsuniecie ostaniego:\n";
- pop_last(head);
- show(head);
- std::cout << "\n\nDodanie elementu na koniec:\n";
- push_last(head, 11);
- show(head);
- std::cout << "\n\nUsuniecie pierwszego elementu:\n";
- pop_first(head);
- show(head);
- std::cout << "\n\nDodanie elementu na poczatek:\n";
- push_front(head, 69);
- show(head);
- std::cout << "\n\nDodanie elementu po x = 8 :\n";
- push_behind_x(head, 8, 17);
- show(head);
- std::cout << "\n\nUsuniecie elementu po x = 8 :\n";
- pop_behind_x(head, 17);
- show(head);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement