c++ - 循环遍历链表
问题描述
所以基本上,我要做的是遍历所有节点并验证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;
}
推荐阅读
- bash - 未能在 Google App Engine 上部署课程构建器
- azure - 在 Azure 存储中上传文件的最大速率是多少?
- asp.net-core - 为什么 SignalR 建议使用 finally 在流中传播错误?
- java - Gradle:java.lang.ClassNotFoundException:运行 Uber Jar 时
- python - 如何生成一百万个元组数据框
- wordpress - 根据 Woocommerce 中的特定产品属性值更改购物车总价格
- javascript - 构建vue 3时未生成服务工作者
- java - 虚幻引擎5中的打包错误
- scala - 从 GCP SecretManagerServiceClient 获取秘密后关闭它
- openlayers - OpenLayers:偏移多线串