展开全部
楼主你好。
我现在假设环形队列一定可以找到第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个元素,有什么问题可以再问我。
我现在假设环形队列一定可以找到第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个元素,有什么问题可以再问我。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询