单链表应用——La∪Lb或La∩Lb

求两个有序单链表的并集(La∪Lb)

List Union(List La, List Lb)
{
	List resultList;
	Position pa, pb, pResult;

	assert(La != NULL && Lb != NULL);
	pa = La->Next;
	pb = Lb->Next;
	InitList(&resultList);
	pResult = resultList;

	while(pa && pb)
	{
		if(pa->Data < pb->Data)
		{
			InsertAfter(pa->Data, pResult);
			pa = pa->Next;
			pResult = pResult->Next;
		}
		else if(pa->Data > pb->Data)
		{
			InsertAfter(pb->Data, pResult);
			pb = pb->Next;
			pResult = pResult->Next;
		}
		else
		{
			InsertAfter(pa->Data, pResult);
			pa = pa->Next;
			pb = pb->Next;
			pResult = pResult->Next;
		}
	}

	while(pa)
	{
		InsertAfter(pa->Data, pResult);
		pa = pa->Next;
		pResult = pResult->Next;
	}

	while(pb)
	{
		InsertAfter(pb->Data, pResult);
		pb = pb->Next;
		pResult = pResult->Next;
	}

	return resultList;
}
求有序单链表的交集(La∩Lb)

List Intersect(List La, List Lb)
{
	List resultList;
	Position pLa, pLb, pResult;
	assert(La != NULL && Lb != NULL);

	pLa = La->Next;
	pLb = Lb->Next;
	InitList(&resultList);
	pResult = resultList;

	while(pLa && pLb)
	{
		if(pLa->Data < pLb->Data)
			pLa = pLa->Next;
		else if(pLa->Data > pLb->Data)
			pLb = pLb->Next;
		else
		{
			pLa = pLa->Next;
			InsertAfter(pLb->Data, pResult);
			pLb = pLb->Next;
			pResult = pResult->Next;
		}
	}
	return resultList;
}

你可能感兴趣的:(单链表,应用)