Advertisement
allia

удаление элемента

Nov 23rd, 2020 (edited)
777
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  struct ListElem
  5. {
  6.    int value;
  7.    ListElem *next;
  8. };
  9.  
  10. class List
  11. {
  12.    ListElem *pbeg, *pend;
  13.    ListElem *find_elem(int keyval, ListElem*& prev);
  14.    int Size = 0;
  15. public:
  16.    List() {  pend = pbeg = NULL; }
  17.    int get_Size() { return Size; }
  18.    void push_front(int val);
  19.    int pop_front();
  20.    bool remove(int keyval);
  21.    int top();
  22. };
  23.  bool List::remove(int keyval)
  24. {
  25.    ListElem *prem, *prev;
  26.    prem = find_elem(keyval, prev);
  27.  
  28.    if (!prem)
  29.     return false;
  30.    if (!prev)
  31.     pbeg = pbeg->next;
  32.    else
  33.     prev->next = prem->next;
  34.    if (prem == pend)
  35.     pend = prev;
  36.    delete prem;
  37.    return true;
  38. }
  39.  
  40. ListElem* List::find_elem(int keyval, ListElem*& prev)
  41. {
  42.    ListElem *pcur = pbeg;
  43.    prev = NULL;
  44.    while (pcur && pcur->value != keyval)
  45.    {
  46.       prev = pcur; pcur = pcur->next;
  47.    }
  48.    return pcur;
  49. }
  50.  
  51. void List::push_front(int val)
  52. {
  53.    ListElem *pnew = new ListElem;
  54.    pnew->value = val;
  55.    pnew->next = pbeg;
  56.    pbeg = pnew;
  57.    if (!pend)
  58.      pend = pnew;
  59.   Size++;
  60. }
  61.  
  62. int List::pop_front()
  63. {
  64.    if (!pbeg)
  65.     return -1;
  66.    ListElem *ptr = pbeg;
  67.    int val = pbeg->value;
  68.    pbeg = pbeg->next;
  69.    if (!pbeg) pend = NULL;
  70.    delete ptr;
  71.    return val;
  72. }
  73.  
  74. int main ()
  75. {
  76.   List lst;
  77.   int number, znach, index;
  78.  
  79.   while ( cin >> number )
  80.     lst.push_front(number);
  81.  
  82.   int dlina = lst.get_Size();
  83.  
  84.   znach = lst.pop_front();
  85.  
  86.   lst.remove(znach);
  87.  
  88.   dlina = dlina - 2;
  89.  
  90.   int *arr = new int[dlina];
  91.  
  92.   for (int i = 0; i < dlina; i++)
  93.    arr[i] = lst.pop_front();
  94.  
  95.   for (int i = dlina - 1; i >= 0; i--)
  96.     cout << arr[i] << " ";
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement