我是靠谱客的博主 俏皮飞机,这篇文章主要介绍求两个有序链表的交集和差集,现在分享给大家,希望可以做个参考。

typedef struct ListNode
{
	DataType data;
	ListNode* next;
}ListNode;


//交集(注意:list1和list2如果各有2个4,交集也会出现两次)
ListNode* Intersection(ListNode* plist1, ListNode* plist2)		
{
	//判断不为空
	if(plist1 == NULL || plist2 == NULL)
	{
		return NULL;
	}

	//头结点(哨兵位节点)
	ListNode* newlist = BuyNode(0);
	ListNode* tail = newlist;
	
	//相等了一起走,值给tail,不相等小的走
	while(plist1 && plist2)
	{
		if(plist1->data == plist2->data)
		{
			tail->next = plist1;
			tail = plist1;
			plist1 = plist1->next;
			plist2 = plist2->next;
		}
		else if(plist1->data < plist2->data)
		{
			plist1 = plist1->next;
		}
		else
		{
			plist2 = plist2->next;
		}
	}
	tail->next = NULL;	//注意tail->next要置空
	return newlist->next;
}
//差集
ListNode* DifSet(ListNode* plist1, ListNode* plist2)
{
	//判断不为空
	if(plist1 == NULL || plist2 == NULL)
	{
		return NULL;
	}
	
	//头结点(哨兵位节点)
	ListNode* newlist = BuyNode(0);
	ListNode* tail = newlist;

	while(plist1 && plist2)
	{
		//相等一起走
		if(plist1->data == plist2->data)
		{
			plist1 = plist1->next;
			plist2 = plist2->next;
		}
		else if(plist1->data < plist2->data)
		{
			tail->next = plist1;
			tail = plist1;
			plist1 = plist1->next;
		}
		else
		{
			tail->next = plist2;
			tail = plist2;
			plist2 = plist2->next;
		}
	}

	if(plist1)
	{
		tail->next = plist1;
	}
	else
	{
		tail->next = plist2;
	}

	return newlist->next;
}








最后

以上就是俏皮飞机最近收集整理的关于求两个有序链表的交集和差集的全部内容,更多相关求两个有序链表内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部