试编写在不带头结点的单链表 L 中删除最小值点的高效算法(已知最小值唯 一)(王道上的是带头结点的改了之后难度会提升一点c++引用就行c要替换二级指针)
一直没搞懂二级指针的这道题就用到了。。调试了半天也不知道为什么断链最后在github上找到相似的不带头节点写法搞出来了
void Del_min(LNode** p) {
//p为第一个数据节点(不带头节点的)
LNode* q = *p, * minq = *p, * minqpre = *p,*qpre=*p;
while (q != NULL) {
if (minq->data > q->data) {
minq = q;
minqpre = qpre;
}
qpre= q;
q = q->next;
}
//这时候应该找到最小值了
//如果是第一个结点要指向第二个结点
if (minq->data == (*p)->data) {
*p = (*p)->next;
//这时候删除要特殊处理哦(第一次错这了)
free(minq);
return;
}
else {
//否则就前后删
minqpre->next = minq->next;
free(minq);
return;
}
}



