Почему не удаляются узлы списка - PullRequest
0 голосов
/ 14 февраля 2020

Привет! Я создал программу, которая принимает на вход целое число и сохраняет их в списке. После сохранения этих данных в списке запрашивается номер x. Чем я должен удалить все число, которое recurse> = чем x, вот как я это сделал, но ничего не удаляется, и я не могу понять, почему. Представьте себе список из 8-> 5-> 8-> 4-> 8, если x равно 3, напечатанный список должен 5-> 4

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int val;
    struct Node *next;
} node;

void prin(node *head);

void modify(node *head, int x);

int main(){

    node *head = NULL;
    head = (node *)malloc(sizeof(node));
    node *temp = head;

    printf("Write the value of the HEAD: \n");
    scanf("%d", &temp->val);
    temp->next = NULL;

    printf("How many nodes you want to give in input? \n");
    int m;
    scanf("%d", &m);

    for (int i=0;i < m; i++){
        temp->next = (node *)malloc(sizeof(node));
        temp = temp->next;
        printf("Write the value in position %d\n", i+1);
        scanf("%d", &temp->val);
        temp->next = NULL;
    }

    printf("What value to x: \n");
    int x;
    scanf("%d", &x);

    modify(head, x);

    return 0;
}

void modify(node *head, int x){

    node *curr = head;
    node *track = head;
    node *precNode;

    int n, counter;

    while(track != NULL){
        counter = 0;
        while(curr != NULL) {
            n = track->val;
            if(n == curr->val){
                counter++;
            }
            curr = curr->next;
        }
        if (counter >= x){
            curr = track;
            while (curr != NULL){
                if(curr->val == n){
                    node *removed = curr;
                    precNode->next = curr->next;
                    curr = curr->next;
                    free(removed);
                }
                else{
                    precNode = curr;
                    curr = curr->next;
                }
            }
        }
        track = track->next;
        curr = track;
    }

    prin(head);
}

void prin(node *head){
    while(head != NULL){
        printf("%d  ", head->val);
        head = head->next;
    }
}
...