2つの秩序あるチェーンテーブルの交差と差セットを求めます
1812 ワード
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;
}