单链表相关算法
求交集并集
//求并集
void Union(NODE l1,NODE l2){
/**
* 实现思路1:
* 1、将结果链表置空
* 2、将l1节点插入结果链表
* 3、遍历l2所有节点,有则跳过,无则插入
*
* 实现思路2:
* 1、p1指向l1第一个节点,p2指向l2第一个节点
* 2、比较p1和p2值,小的插入结果链表,并指针后移,直到p1或p2为空
* 3、之后再将p1\p2不为空的那个插入
*/
//这里是思路2的实现
NODE p1,p2,p3;
p1 = l1->next;
p2 = l2->next;
p3 = l1;
while(p1 != NULL && p2 != NULL){
if(p1->value <= p2->value){
p3->next = p1;
p3 = p1;
p1 = p1->next;
} else {
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
p3->next = p2 ? p2 : p1;
}
//求交集
void Intersection(NODE l1,NODE l2){
/**
* 实现思路:
* 同求并集思路差不多,就是相等时加入一个节点,不等时后移
*/
NODE p1,p2,p3;
NODE q;
p1 = l1->next;
p2 = l2->next;
p3 = l1;
p3->next = NULL;
while(p1 != NULL && p2 != NULL){
if(p1->value < p2->value){
p1 = p1->next;
} else if (p1->value > p2->value) {
p2 = p2->next;
} else {
q = p2->next;
p2->next = p3->next;
p3->next = p2;
p3 = p2;
p2 = q;
}
}
}