Перебирая связанные списки - PullRequest
2 голосов
/ 29 мая 2019

Итак, в основном я пытаюсь пройти через все узлы и проверить, если node.value is <= cost. Если это так, мне нужно удалить этот узел, и в конце я хочу сохранить узлы, которые не были удалены, в новой структуре. Я не уверен, как именно я должен это сделать.

Эта структура может быть примером:

struct node {
    int value;
    node * next;
}

Я прохожу все узлы и удаляю только те, у которых нет необходимых.

node * verify_money(node * head, int cost)
{

    node * iterator = head;

    while(iterator != NULL){
       if(iterator.value <= cost) {  
           /*remove this node*/
       }
       iterator = iterator.next;
    }

return /*struct without nodes removed/*

}

Я хочу получить остальные узлы.

1 Ответ

3 голосов
/ 30 мая 2019

То, что вы просите, зависит от ваших требований, которые вы недостаточно четко разъяснили.

Если вы должны изменить проверяемый список ввода, вы можете сделать что-то вроде этого:

node * verify_money(node * head, int cost)
{
    node * iterator = head;
    node * previous = NULL;

    while (iterator) {
        node *next = iterator->next;

        if (iterator->value <= cost) {
            if (previous) previous->next = next;
            if (head == iterator) head = next;
            delete iterator;
        }
        else
            previous = iterator;

        iterator = next;
    }

    return head;
}

Если ожидается, что вы вернете новый список без изменения исходного списка, вы можете сделать что-то вроде этого:

node * verify_money(node * head, int cost)
{
    node * new_head = NULL;
    node ** new_node = &new_head;

    node * iterator = head;
    while (iterator) {
        if (iterator->value > cost) {  
            *new_node = new node;
            (*new_node)->cost = value;
            (*new_node)->next = NULL;
            new_node = &((*new_node)->next);
        }
        iterator = iterator->next;
    }

    return new_head;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...