求兩個有序連結串列的交集和差集
阿新 • • 發佈:2019-01-09
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; }