Advertisement
Josif_tepe

Untitled

Dec 24th, 2024
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.89 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node {
  5.     int val;
  6.     node * next;
  7. };
  8. struct SLL {
  9.     node * head;
  10.    
  11.     void init() {
  12.         head = NULL;
  13.     }
  14.     void insertFirst(int x) {
  15.         node * tmp_node = new node;
  16.         tmp_node->val = x;
  17.        
  18.         if(head == NULL) {
  19.             head = tmp_node;
  20.         }
  21.         else {
  22.             tmp_node->next = head;
  23.             head = tmp_node;
  24.         }
  25.     }
  26.     void insertLast(int x) {
  27.         node * tmp_node = new node;
  28.         tmp_node -> val = x;
  29.         if(head == NULL) {
  30.             head = tmp_node;
  31.         }
  32.         else {
  33.             node * tmp = head;
  34.             while(tmp->next != NULL) {
  35.                 tmp = tmp->next;
  36.             }
  37.             tmp->next = tmp_node;
  38.         }
  39.     }
  40.     void deleteFirst() {
  41.         if(head != NULL) {
  42.             if(head -> next == NULL) {
  43.                 delete head;
  44.                 head = NULL;
  45.             }
  46.             else {
  47.                 node * tmp = head;
  48.                 head = head->next;
  49.                 delete tmp;
  50.             }
  51.         }
  52.     }
  53.     void deleteLast() {
  54.         if(head != NULL) {
  55.             if(head -> next == NULL) {
  56.                 delete head;
  57.                 head = NULL;
  58.             }
  59.             else {
  60.                 node * tmp = head;
  61.                 node *prev;
  62.                
  63.                 while(tmp->next != NULL) {
  64.                     prev = tmp;
  65.                     tmp = tmp->next;
  66.                 }
  67.                 prev->next = NULL;
  68.                 delete tmp;
  69.             }
  70.         }
  71.     }
  72.     void deleteAll() {
  73.         while(head != NULL) {
  74.             deleteFirst();
  75.         }
  76.     }
  77.     void print() {
  78.         node * tmp = head;
  79.         while(tmp != NULL) {
  80.             cout << tmp->val << " --> ";
  81.             tmp = tmp -> next;
  82.         }
  83.         cout << endl;
  84.     }
  85.     bool deleteNode(int x) {
  86.         if(head != NULL and head->val == x) {
  87.             deleteFirst();
  88.             return true;
  89.         }
  90.         node *tmp = head;
  91.         node *prev = NULL;
  92.         while(tmp != NULL and tmp->val != x) {
  93.             prev = tmp;
  94.             tmp = tmp->next;
  95.         }
  96.         if(tmp != NULL and tmp->val == x and tmp->next == NULL) {
  97.             deleteLast();
  98.             return true;
  99.         }
  100.        
  101.         if(tmp != NULL and tmp->val == x) {
  102.             prev->next = tmp->next;
  103.             delete tmp;
  104.             return true;
  105.         }
  106.         return false;
  107.     }
  108. };
  109.  
  110. void func(SLL & sll, int x) {
  111.     while(sll.deleteNode(x)) {
  112.        
  113.     }
  114.     sll.print();
  115. }
  116. int main() {
  117.     int n;
  118.     cin >> n;
  119.    
  120.     SLL sll;
  121.     sll.init();
  122.     for(int i = 0; i < n; i++) {
  123.         int x;
  124.         cin >> x;
  125.         sll.insertLast(x);
  126.     }
  127.     sll.print();
  128.     int number;
  129.     cin >> number;
  130.     func(sll, number);
  131.    
  132.    
  133.     return 0;
  134.  
  135. }
  136.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement