所以基本上,我要尝试的是遍历所有节点并验证是否为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/*
}
我想得到其余的节点。
答案 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;
}