Удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - C (СИ)
Формулировка задачи:
Работа со списками: в списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного.
Решение задачи: «Удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- typedef struct _TNode
- {
- int value;
- struct _TNode* next;
- } TNode;
- //-----------------------------------------------------------------------------
- TNode* Push(TNode** list, int value)
- {
- TNode* node = malloc(sizeof(int));
- node->value = value;
- node->next = *list;
- *list = node;
- return *list;
- }
- //-----------------------------------------------------------------------------
- int Pop(TNode** list)
- {
- TNode* node = *list;
- int value = node->value;
- *list = node->next;
- free(node);
- return value;
- }
- //-----------------------------------------------------------------------------
- void Print(const TNode* list)
- {
- for (; list; list = list->next)
- {
- printf("%d ", list->value);
- }
- printf("\n");
- }
- //-----------------------------------------------------------------------------
- TNode* RemoveDuplicate(TNode* list)
- {
- TNode* baseNode = list;
- TNode* tempNode = list->next;
- while (tempNode)
- {
- if (baseNode->value == tempNode->value)
- {
- Pop(&baseNode->next);
- }
- else
- {
- baseNode = tempNode;
- }
- tempNode = baseNode->next;
- }
- return list;
- }
- //-----------------------------------------------------------------------------
- int main()
- {
- TNode* list = NULL;
- int count = 15;
- srand(time(NULL));
- while (count--)
- {
- Push(&list, rand() % 3);
- }
- Print(list);
- RemoveDuplicate(list);
- Print(list);
- return 0;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д