Ошибки в моей программе C с дубликатами / реверсированием / узлами - PullRequest
0 голосов
/ 26 мая 2020

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;
}
...