考研数据结构(每日一题)
题目:设在一个带表头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)
算法图解:

算法思想:
设置两个工作结点,一个指针指向A,一个指针指向B,对p2进行判断,如果判断p2需要删除,则对p1的指针进行修改
完整代码:
void RangDelete(LinkList &L,int min,int max){
LNode *pr = L,*p = L -> link; //p是检测指针,pr是其前驱
while(p != NULL){
if(p -> data > min && p -> data < max){ //寻找到被删结点,删除
pr -> link = p -> link;
free(p);
p = pr -> link;
}else{ //否则继续寻找被测结点
pr = p;
p = p -> link;
}
}
}
该博客讨论了如何在无序单链表中删除所有位于给定最小值和最大值之间的元素。提供的C语言代码实现通过两个指针,一个用于前驱节点,一个用于当前检查节点,遍历链表并删除符合条件的节点。这种方法有效地从链表中移除了指定范围内的数据。
day14&spm=1001.2101.3001.5002&articleId=123276371&d=1&t=3&u=008aae80e9f94684b2aae60788b09731)
2127

被折叠的 条评论
为什么被折叠?



