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

概述

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;
}








最后

以上就是俏皮飞机为你收集整理的求两个有序链表的交集和差集的全部内容,希望文章能够帮你解决求两个有序链表的交集和差集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部