Advertisement
Guest User

Untitled

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