Advertisement
Guest User

Untitled

a guest
May 24th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.34 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "malloc.h"
  3. #include "conio.h"
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. typedef struct Node {
  9.     int value;
  10.     struct Node *next;
  11. } Node;
  12.  
  13. void push(Node **head, int data);
  14.  
  15. int pop(Node **head);
  16.  
  17. void printList(const Node *head);
  18.  
  19. int deletenelement(Node **head, int n);
  20.  
  21. Node *getnelement(Node *head, int n);
  22.  
  23. void MakeListFromMas(Node **head, int *arr, size_t size);
  24.  
  25.  
  26. int main() {
  27.     Node *head = NULL;
  28.     int n;
  29.     cout << "Enter count: ";
  30.     cin >> n;
  31.     int *arr = new int[n];
  32.     if (n > 0) {
  33.         cout << "Enter elements:" << endl;
  34.         for (int i = 0; i < n; i++) {
  35.             cin >> arr[i];
  36.         }
  37.         int number = 0;
  38.         MakeListFromMas(&head, arr, n);
  39.         printList(head);
  40.         int size = n;
  41.         for (int i = size - 1; i >= 0; i--) {
  42.             if (getnelement(head, i)->value != 0) {
  43.                 number = i;
  44.                 deletenelement(&head, number);
  45.                 size--;
  46.             } else {
  47.                 break;
  48.             }
  49.         }
  50.         printList(head);
  51.     }
  52.     getch();
  53.     return 0;
  54. }
  55.  
  56.  
  57. void push(Node **head, int data) {
  58.     Node *middle = (Node *) malloc(sizeof(Node));
  59.     middle->value = data;
  60.     middle->next = (*head);
  61.     (*head) = middle;
  62. }
  63.  
  64. int pop(Node **head) {
  65.     Node *prev = NULL;
  66.     int val;
  67.     if (head == NULL) {
  68.         printf("Error");
  69.     }
  70.     prev = (*head);
  71.     val = prev->value;
  72.     (*head) = (*head)->next;
  73.     free(prev);
  74.     return val;
  75. }
  76.  
  77. Node *getnelement(Node *head, int n) {
  78.     int counter = 0;
  79.     while (counter < n && head) {
  80.         head = head->next;
  81.         counter++;
  82.     }
  83.     return head;
  84. }
  85.  
  86. int deletenelement(Node **head, int n) {
  87.     if (n == 0) {
  88.         return pop(head);
  89.     } else {
  90.         Node *prev = getnelement(*head, n - 1);
  91.         Node *elm = prev->next;
  92.         int val = elm->value;
  93.         prev->next = elm->next;
  94.         free(elm);
  95.         return val;
  96.     }
  97. }
  98.  
  99. void printList(const Node *head) {
  100.     while (head) {
  101.         printf("%d ", head->value);
  102.         head = head->next;
  103.     }
  104.     printf("\n");
  105. }
  106.  
  107. void MakeListFromMas(Node **head, int *arr, size_t size) {
  108.     size_t i = size - 1;
  109.     if (arr == NULL || size == 0) {
  110.         return;
  111.     }
  112.     do {
  113.         push(head, arr[i]);
  114.     } while (i-- != 0);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement