前言
声明:因个人能力有限,本文仅是个人的学习记录笔记,有错误之处还望指出数据结构每日一题
题目
编写一个算法实现在带头结点单链表L中删除最小值结点的算法
要点
- 链表的遍历
- 链表结点的删除
思想
- 先是链表的遍历,这里需要用到两个指针,一个用作遍历链表,一个记录遍历指针的前驱结点信息
- 在找到最小值的时候对数据进行删除,需要一个指针记录当前最小值的结点,因为要删除该节点,所以还需要一个前驱节点来方便删除的实现
- 在扫描过程中,如果遍历指针中的值 < 最小节点的值,则将该值赋给最小结点,记录遍历指针的前驱
Linklist DeletMin(LinkList &L){
LNode *pre=L,*p=pre->next;
LNode *minpre=pre,*minp=p;
//遍历链表
while(p != NULL){
//遍历到比当前值还小的值
if(p->data < minp->data){
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
//遍历完全后,minp中保存的就是 最小值的节点了
//删除节点
minpre->next=minp->next;
free(minp);
return L;
}
今日易错题
- 在长度为n的有序单链表中插入一个新节点,并且依然保持有序的时间复杂度是 O(nlog2n)
- 需要分配较大的空间,在进行插入和删除操作不需要移动线性表的存储结构为 静态链表(结合了顺序表和链表的优点)
- 静态链表中指针表示的是 下一元素在数组中的位置