用C语言实现删除环形队列第K个元素

用C语言实现删除环形队列第K个元素

第1个回答  推荐于2018-05-06
楼主你好。
我现在假设环形队列一定可以找到第k个元素,如下:
void DeleteIndexedNode(DList* thiz, int k){//删除第k个元素
DNode* iter=thiz->first;
DNode* pIter;
int index;//假设队列从1开始编号
if(!iter)//队列为空,取消删除
return;
//若想绕一周不再删除,上面可以if(!iter || k > thiz->length) return;//若队列为空或超过一周,取消删除
if( k == 1){//若删除首个节点
thiz->first = iter->next;
thiz->last->next = thiz->first;//DList结构若不是双向链表,应该有一个last指针,提高效率
DestroyDNode(iter);//这个是你自己定制的DNode的析构函数
return;
}
//若删除其他节点
do{
pIter = iter;//pIter指向iter前一个节点,用于帮助析构。
iter = iter->next;
index++;
}while(index < k) ;//因为是环形队列,肯定可以找到第k个元素,而且iter不会为NULL
pIter->next = iter->next;//iter的前一个节点的next绕过iter
DestroyDNode(iter);//这个是你自己定制的DNode的析构函数
return;
}
以上函数可以实现删除第K个元素,有什么问题可以再问我。本回答被网友采纳
第2个回答  2012-12-11
int i=0;
while((++i)<K)
{
Node=Node->Next;
}
ListNode *_tmpNode=Node->Next;
Node=Node->Next->Next;
delete _tmpNode;
相似回答