Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct node
- {
- int info;
- node *next;
- };
- void printList (node *n)
- {
- cout<<" Lista este urmatoarea: \n";
- while(n != NULL)
- {
- cout<<" "<<n->info;
- n = n->next;
- }
- cout<<"\n\n";
- }
- void insertFirst(node** head, int new_info) // head are ** pt ca va fi modicat si in lista initiala
- { //adaugare la inceptul listei
- node* new_node = new node;
- new_node->info = new_info;
- new_node->next = (*head);
- (*head) = new_node; //mutam capul listei pe noul nod
- }
- void insertAfter(node* prev_node, int new_info)
- { //inserare dupa un anumit nod
- if (prev_node == NULL)
- {
- cout<<"Nodul dupa care inseram nu poate fi nul.\n\n";
- return;
- }
- node* new_node = new node;
- new_node->info = new_info;
- new_node->next = prev_node->next;
- prev_node->next = new_node;
- }
- void insertLast(node** head, int new_info)
- {
- node* new_node = new node;
- new_node->info = new_info;
- new_node->next = NULL;
- node* last = *head;
- if (*head == NULL) //daca lista e goala
- {
- *head = new_node;
- return;
- }
- while (last->next != NULL) //mergem pe ultimul nod
- last = last->next;
- last->next = new_node;
- return;
- }
- void deleteNodeByValue(node** head, int del_info)
- { //stergem un nod dupa valoarea lui
- node* temp = *head, *prev;
- if (temp != NULL && temp->info == del_info)
- { //in cazul in care nodul pe care vrem sa-l stergem e chiar capul
- *head = temp->next; // mutam capul
- delete head; //eliberam spatiu
- return;
- }
- while (temp != NULL && temp->info != del_info)
- { //cautam elementul care trb sters si il retinem pe anteriorul
- prev = temp;
- temp = temp->next;
- }
- if (temp == NULL)
- {
- cout<<" Elementul cautat nu a fost gasit in lista.\n\n";
- return;
- }
- prev->next = temp->next; //Scoatem elementul cautat din lista.
- delete temp; cout<<" Elementul "<<del_info<<" a fost sters din lista.\n\n";
- }
- void deleteNodeByPosition(node** head, int pos)
- {
- if (*head == NULL) //daca lista e nula
- return;
- node* temp = *head;
- if (pos == 0) //daca stergem chiar capul
- {
- *head = temp->next;
- delete(head);
- return;
- }
- for (int i = 0; temp != NULL && i < pos- 1; i++)
- temp = temp->next;
- if (temp == NULL || temp->next == NULL) //daca pozitia e mai mare decat numarul de noduri
- return;
- node* next = temp->next->next; // nodul temp->next este cel care trebuie sters
- delete temp->next;
- temp->next = next; // scoatem nodul pe care l-am sters
- }
- void deleteList(node** head)
- {
- node* current = *head;
- node* next;
- while (current != NULL)
- {
- next = current->next;
- delete current;
- current = next;
- }
- *head = NULL;
- }
- bool findElement(node* head, int find_info)
- {
- node* current = head;
- while (current->next != NULL && current->info != find_info)
- current = current->next;
- if (current == NULL) return false;
- return true;
- }
- int main()
- {
- node* head = NULL; //initializam o lista nula
- insertFirst(&head,3);
- insertAfter(head,4);
- insertLast(&head,5);
- insertAfter(head->next,7);
- insertFirst(&head,9);
- printList(head);
- deleteList(&head);
- printList(head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement