【day9】试编写带头节点的单链表L中删除一个最小值节点的高效算法(假设最小值节点是唯一的)
算法思想:指针p遍历链表,pre指向p的前驱,minp标记最小值结点,minp指向minp的前驱。扫描过程中,若p->data< minp->data,将p,pre分别赋给minp,minpre,扫描完毕,minp指向最小结点,minp指向最小值结点的前驱,将minp结点删除即可(删除完毕)
关于为什么用到四个指针:如果我们只需要两个指针即可,但是要删除,所以我们还需要用到两个指针用两个指针来指向其前驱结点。
LinkList Delete_min(LinkList &L){
LNode *pre=L,*p=pre->next;
LNode *minpre=pre,*minp=p; //minpre,minp分别指向最小值,和最小值的前驱。
while(p!=NULL){
//遍历整个链表
if(p->data<minp->data){
//如果当前遍历到的值比minp指向的值要小则让minp更新指向
minp=p;
minpre=pre;
}
pre=p;
p=p->next; //遍历的进行的步伐
}
minpre->next=minp->next; //删除最小值点
free(minp);
return L;
}
【day10】头插法建立链表
在链表的逆置中经常用到头插法
输入次序与生成次序相反
LinkList List_HeadInsert(LinkList &L){
LNode *