首页 > 解决方案 > 循环遍历链表

问题描述

所以基本上,我要做的是遍历所有节点并验证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/*

}

我想获得剩余的节点。

标签: c++linked-list

解决方案


你所要求的实际上取决于你的要求,你没有说得足够清楚。

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

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

推荐阅读