我在用C语言实现链表并集的时候,我的思路是:先将两个链表合并再将合并后的链表排序,最后进行链表去重操作,从而实现链表并集。
//3.5L1和L2并集的实现
LinkList UnionList(LinkList L1, LinkList L2, LinkList R) {
LinkList P,Sort;
LinkList p,q;
P = (LinkList)malloc(sizeof(Node));
R = mergeList(L1, L2,P);//R时合并后的链表
Sort = sortLikt(R);//Sort时排序后的链表
p = Sort;
q = p->next;
while (p != NULL && q != NULL) {
if (p->data == p->next->data) {
p->next = q->next;
}
else {
p = p->next;
q = q->next;
}
}
return Sort;
}
上述代码实现的时候无法运行,但是像下面这样写就没问题,为什么代码里不可以定义q = p->next呢?
//3.5L1和L2并集的实现
LinkList UnionList(LinkList L1, LinkList L2, LinkList R) {
LinkList P,Sort;
LinkList p,q;
P = (LinkList)malloc(sizeof(Node));
R = mergeList(L1, L2,P);//R时合并后的链表
Sort = sortLikt(R);//Sort时排序后的链表
p = Sort;
while (p != NULL && p->next != NULL) {
if (p->data == p->next->data) {
p->next = p->next->next;
}
else {
p = p->next;
}
}
return Sort;
}
问题主要出现在链表去重部分,你可以參考下面的修改一下: