0
Я учусь в C, и мне нужно написать функцию, которая:
Спрашивает у пользователя количество N целых чисел. Запрашивает эти целые числа. Сохраняет их в list in reverse напечатайте то, что мы сохранили, попросите найти определенное целое число c из этого списка после того, как мы найдем число, все его дубликаты должны быть удалены, а первый найденный должен быть перемещен в конец ex. Если пользователь дает 5 чисел (2, 2x, 3, 2, 4), список будет выглядеть следующим образом:
4 2 3 2 2
Затем пользователь даст число 2, а новый список без дубликатов будет:
4 2 3
и после того, как мы переместим это число в конец:
4 3 2
struct listNode{
int value; //Data of our node
struct listNode *next; //Data of the next node
};
void printList(struct listNode *head){
if(head==NULL) return;
printf("%d ", head->value);
printList(head->next);
}
struct listNode * removeDupl_and_PushBack(struct listNode * head, int n)
struct listNode *p2, *p1, *l;
l=*head;
p1=l;
if(l->next!=NULL && l->value!=n){
puts("We found the number");
p1=l;
l=l->next;
if(l->next==NULL && l->value!=n){
}
if (l->next==NULL){
printf("The number can't be moved")
return 1;}
if(l->next!=NULL && l->next->value == n){
p2=*node;
do{
p2=p2->next;
}while(p2->next!= NULL);
p1->next=l->next;
p2->next=l;
l->next=NULL;
}
}
void removeDuplicates(struct listNode *start)
{
struct listNode *ptr1, *ptr2, *dup;
ptr1 = start;
/* Pick elements one by one */
while (ptr1 != NULL && ptr1->next != NULL)
{
ptr2 = ptr1;
/* Compare the chosen element with the rest of the elements */
while (ptr2->next != NULL)
{
/* If duplicate then delete it */
if (ptr1->data == ptr2->next->data)
{
dup = ptr2->next;
ptr2->next = ptr2->next->next;
delete(dup);
}
else
ptr2 = ptr2->next;
}
ptr1 = ptr1->next;
}
}
int main(void)
{
struct listNode *head,*p1;
int amount, a[100], n, i=0;
head = NULL;
printf("\n Give me your desirable amount of integers for the list: \n");
scanf("%d", &amount);
head=(struct listNode*)malloc(amount * sizeof(struct listNode));
printf("\n Give me %d of numbers: \n", amount);
for(i=0; i<amount; i++)
{
scanf("%d",&a[i]);
}
printlist(head);
head = reverse(head);
printf("List after reverse: ");
printList(head);
printf("\n\n");
printf("\n Give me the number you want to search; \n");
scanf("%d",&n);
printList( head );
removeDuplicates(&head,n);
printList( head );
return 0;
}