求两个链表差集

发布时间 2023-11-19 17:55:42作者: 彭乐祥

一、题目

什么是差集

对于集合A = {a, b, c, d}和集合B = {b, c, w},则A与B 的差集为

二、我的解答(所求的是L1-L2)

list* p1=L1->next;//指向L1链表的指针p1
List* p2=L2->next;//指向L2链表的指针p2

思想:若p1和p2指向空间的数据域的值相等,则两指针向后移动,如果不等且p1<p2,那么L1的这个元素必定不在L2中(因为链表元素递增),如果p1>p2,则需要去比较p1和p2的下一位置。

list* exception(list* L1,list* L2) { //L1-L2
	if (!L1 || !L2) return L1;
	list* p1 = L1->next, * p2 = L2->next, * p3 = L1;
	while (p1 && p2) {
		if (p1->value == p2->value) {
			p1 = p1->next;
			p2 = p2->next;
		}
		else if (p1->value < p2->value) {
			p3->next = p1;
			p3 = p1;
			p1 = p1->next;
		}
		else
			p2 = p2->next;
	}
	p3->next = p1 ? p1 : NULL;
	free(L2);
	return L1;
}