循环浏览链表

Looping through linked lists

本文关键字:链表 浏览 循环      更新时间:2023-10-16

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

我想获取剩余的节点。

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

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

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