设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同或不同)

void Delete_Some_Num(LinkList &s, int min, int max)
{
	LNode *p, *q, *p_front, *temp;

	//p_front用于记录p前面的节点位置
	p = s -> next;
	p_front = s;
	while(p && p -> data <= min)//p最终指向第一个大于min的结点
	{
		p_front = p_front -> next;
		p = p -> next;
	}
	if(!p)//没有结点的元素值在所给区间上,故不做删除操作
	{
		return;
	}
	else	
	{
		q = p;
		while(q && q -> data < max)//q最终指向第一个大于max的结点
		{
			q = q -> next;
		}
	}

	//删除满足删除条件的结点
	p_front -> next = q;
	while(p != q)
	{
		temp = p;
		p = p -> next; 
		delete temp;
		temp = NULL;
	}
	return;
}

考点:

1.定位边界结点

2.链表的删除操作

注意:

1.边界测试:只有一个结点时

2.测试链表的情况分三大类:链表与删除区间无交集,链表与删除区间有交集,待删除区间是链表的子集

你可能感兴趣的:(数据结构基础)