C语言优化代码list <UserCmdlData>::iterator inolist; for (inolist = Iniomdl.begin(); inolist != Iniomdl.end(); ++inolist) { if (inolist->yes_or_not==3){ inolist->remove(); } }
时间: 2024-03-09 08:48:39 浏览: 16
在 C 语言中,可以使用指针来遍历和删除链表中的元素,示例如下:
```c
typedef struct UserCmdlData {
int yes_or_not;
/* ... */
} UserCmdlData;
typedef struct ListNode {
UserCmdlData data;
struct ListNode* next;
} ListNode;
/* 删除元素为 3 的节点 */
void remove_node(ListNode** p_head) {
ListNode* p_node = *p_head;
ListNode** p_prev = p_head;
while (p_node != NULL) {
if (p_node->data.yes_or_not == 3) {
*p_prev = p_node->next;
free(p_node);
p_node = *p_prev;
} else {
p_prev = &p_node->next;
p_node = p_node->next;
}
}
}
```
这里使用了双重指针来遍历和删除链表中的元素。由于需要删除的节点可能是链表的第一个节点,因此需要使用指向头指针的指针来更新头指针。
在遍历的过程中,如果发现需要删除某个节点,则将该节点从链表中移除,并释放内存。如果不需要删除,则继续遍历下一个节点。