Удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Работа со списками: в списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного.

Решение задачи: «Удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. typedef struct _TNode
  6. {
  7.     int value;
  8.     struct _TNode* next;
  9. }   TNode;
  10.  
  11. //-----------------------------------------------------------------------------
  12. TNode* Push(TNode** list, int value)
  13. {
  14.     TNode* node = malloc(sizeof(int));
  15.     node->value = value;
  16.     node->next = *list;
  17.  
  18.     *list = node;
  19.  
  20.     return *list;
  21. }
  22. //-----------------------------------------------------------------------------
  23. int Pop(TNode** list)
  24. {
  25.     TNode* node = *list;
  26.     int value = node->value;
  27.     *list = node->next;
  28.  
  29.     free(node);
  30.  
  31.     return value;
  32. }
  33. //-----------------------------------------------------------------------------
  34. void Print(const TNode* list)
  35. {
  36.     for (; list; list = list->next)
  37.     {
  38.         printf("%d ", list->value);
  39.     }
  40.     printf("\n");
  41. }
  42. //-----------------------------------------------------------------------------
  43. TNode* RemoveDuplicate(TNode* list)
  44. {
  45.     TNode* baseNode = list;
  46.     TNode* tempNode = list->next;
  47.  
  48.     while (tempNode)
  49.     {
  50.         if (baseNode->value == tempNode->value)
  51.         {
  52.             Pop(&baseNode->next);
  53.         }
  54.         else
  55.         {
  56.             baseNode = tempNode;
  57.         }
  58.         tempNode = baseNode->next;
  59.     }
  60.  
  61.     return list;
  62. }
  63. //-----------------------------------------------------------------------------
  64.  
  65. int main()
  66. {
  67.     TNode* list = NULL;
  68.     int count = 15;
  69.  
  70.     srand(time(NULL));
  71.  
  72.     while (count--)
  73.     {
  74.         Push(&list, rand() % 3);
  75.     }
  76.  
  77.     Print(list);
  78.  
  79.     RemoveDuplicate(list);
  80.  
  81.     Print(list);
  82.  
  83.     return 0;
  84. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы