Удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - 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;
}