考研数据结构(每日一题)
题目:设在一个带表头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)
算法图解:
算法思想:
设置两个工作结点,一个指针指向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;
}
}
}