遍历链接列表

时间:2019-05-29 20:46:21

标签: c++ linked-list

所以基本上,我要尝试的是遍历所有节点并验证是否为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 个答案:

答案 0 :(得分:3)

您要查询的内容实际上取决于您的要求,而您的要求还不够清楚。

如果希望修改正在验证的输入列表,则可以执行以下操作:

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