您的位置:首页 > 其它

求两个有序链表的交集和差集

2017-06-15 10:04 441 查看
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;
}









                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: