【发布时间】:2013-05-07 03:10:42
【问题描述】:
我一直在努力解决这个问题,但没有成功我有如下数据结构(这实际上非常复杂,我只是为了讨论而简化了):
typedef struct node{
struct node* next;
void* arg;
}node_t;
typedef struct queue{
node_t* head;
node_t* tail;
}queue_t;
addQ(queue_t*ptr , int data)
{
queue_t* q = ptr;
node_t * n = malloc(sizeof(*n));
n->arg = data;
n->next = NULL;
if(NULL == q->head){
q->head = q->tail = n;
return ;
}
q->tail->next = n;
q->tail = q->tail->next;
}
现在我想删除相同值的节点(我尝试了几种方法但没有成功),请考虑这个序列以供参考:
addQ(q, 12);
addQ(q, 12);
addQ(q, 4);
addQ(q, 12);
addQ(q, 12);
addQ(q, 14);
addQ(q, 12);
addQ(q, 12);
我想删除所有值为 12 的节点。
【问题讨论】:
-
展示您尝试过的一种或两种方式总是有帮助的。
-
只是一个简单的查询它是一个队列还是一个通用链表?如果它真的是一个队列,你甚至不应该尝试删除你选择的任何节点,dequeue 是你必须使用的选项 i假设,它是一个链表吗?
-
@duke,当然我也可以发布我的版本,但是它还没有工作。
-
@udy ,它是一个队列,我想从中删除所有具有相同值的节点。
-
如何从头到尾迭代,杀死与您的查询匹配的条目?因为您的数据结构本质上是一个链表,所以这应该不是什么大问题。
标签: c algorithm linked-list queue