C语言链表求并集和差集的问题,请大神帮我指出一下代码出错在哪里。
答案:1 悬赏:40 手机版
解决时间 2021-03-27 06:47
- 提问者网友:暮烟疏雨之际
- 2021-03-26 17:00
C语言链表求并集和差集的问题,请大神帮我指出一下代码出错在哪里。
最佳答案
- 五星知识达人网友:何以畏孤独
- 2021-03-26 18:31
在进行交集、并集运算前,必须确保两个集合是有序的,且各个集合的元素必须是唯一的。
#include
#include
#define LEN sizeof(Node)
typedef struct Node_List {
int num;
struct Node_List *next;
}Node;
int main() {
Node *createList(char);
Node *differentSet(Node*,Node*);
Node *unionSet(Node*,Node*);
void isSortList(Node*);
void printList(Node*,char*);
void freeMemery(Node*);
Node *A = createList('A');
Node *B = createList('B');
isSortList(A);
isSortList(B);
Node *C1 = differentSet(A,B);
Node *C2 = unionSet(A,B);
printList(C1,"C1");
printList(C2,"C2");
freeMemery(A);A = NULL;
freeMemery(B);B = NULL;
freeMemery(C1);C1 = NULL;
freeMemery(C2);C2 = NULL;
return 0;
}
Node *unionSet(Node *i,Node *j) {
Node *p1,*p2,*head = NULL;
if(i == NULL) return j;
if(j == NULL) return i;
if(p1 = (Node *)malloc(LEN)) ;
else {
printf("error!");
exit(0);
}
head = p1;
while(i && j) {
if(i->num < j->num) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i=i->next;
}
else if(j->num < i->num) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
j = j->next;
}
else if(i->num == j->num) { // 是==,不是=
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i = i->next;
j = j->next;
}
}
while(i) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i = i->next;
}
while(j) {
p1->num = j->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
j = j->next;
}
p2->next = NULL;
free(p1);
p1 = NULL;
return head;
}追问请告诉我在哪一行做了修改呢??追答为了“显眼”,只有一行有注释,你仔细找找。追问 还是会报错 ,就在那一行p2->next=NULL;
追答Node *unionSet(Node *i,Node *j) {
Node *p,*head = NULL;
if(i == NULL) {
head = CopySet(j); // 集合复制函数
return head;
}
if(j == NULL) {
head = CopySet(i);
return head;
}
if(head = p = (Node *)malloc(LEN));
else {
printf("error!
");
exit(1); // 退出码0用于正常结束程序
}
while(i && j) {
p->next = (Node *)malloc(LEN));
if(i->num < j->num) {
p->next->num = i->num;
i = i->next;
}
else if(i->num > j->num) {
p->next->num = j->num;
j = j->next;
}
else { // 余下的情况只有i->num == j->num,无需判断
p->next->num = i->num; // 或者p->next->num = j->num;
i = i->next;
j = j->next;
}
p = p->next;
}
while(i) {
p->next = (Node *)malloc(LEN));
p->next->num = i->num;
p = p->next;
i = i->next;
}
while(j) {
p->next = (Node *)malloc(LEN));
p->next->num = j->num;
p = p->next;
j = j->next;
}
p->next = NULL;
p = head;
head = p->next;
free(p);
p = NULL;
return head;
}
#include
#include
#define LEN sizeof(Node)
typedef struct Node_List {
int num;
struct Node_List *next;
}Node;
int main() {
Node *createList(char);
Node *differentSet(Node*,Node*);
Node *unionSet(Node*,Node*);
void isSortList(Node*);
void printList(Node*,char*);
void freeMemery(Node*);
Node *A = createList('A');
Node *B = createList('B');
isSortList(A);
isSortList(B);
Node *C1 = differentSet(A,B);
Node *C2 = unionSet(A,B);
printList(C1,"C1");
printList(C2,"C2");
freeMemery(A);A = NULL;
freeMemery(B);B = NULL;
freeMemery(C1);C1 = NULL;
freeMemery(C2);C2 = NULL;
return 0;
}
Node *unionSet(Node *i,Node *j) {
Node *p1,*p2,*head = NULL;
if(i == NULL) return j;
if(j == NULL) return i;
if(p1 = (Node *)malloc(LEN)) ;
else {
printf("error!");
exit(0);
}
head = p1;
while(i && j) {
if(i->num < j->num) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i=i->next;
}
else if(j->num < i->num) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
j = j->next;
}
else if(i->num == j->num) { // 是==,不是=
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i = i->next;
j = j->next;
}
}
while(i) {
p1->num = i->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
i = i->next;
}
while(j) {
p1->num = j->num;
p2 = p1;
p1 = (Node *)malloc(LEN);
p2 = p1->next;
j = j->next;
}
p2->next = NULL;
free(p1);
p1 = NULL;
return head;
}追问请告诉我在哪一行做了修改呢??追答为了“显眼”,只有一行有注释,你仔细找找。追问 还是会报错 ,就在那一行p2->next=NULL;
追答Node *unionSet(Node *i,Node *j) {
Node *p,*head = NULL;
if(i == NULL) {
head = CopySet(j); // 集合复制函数
return head;
}
if(j == NULL) {
head = CopySet(i);
return head;
}
if(head = p = (Node *)malloc(LEN));
else {
printf("error!
");
exit(1); // 退出码0用于正常结束程序
}
while(i && j) {
p->next = (Node *)malloc(LEN));
if(i->num < j->num) {
p->next->num = i->num;
i = i->next;
}
else if(i->num > j->num) {
p->next->num = j->num;
j = j->next;
}
else { // 余下的情况只有i->num == j->num,无需判断
p->next->num = i->num; // 或者p->next->num = j->num;
i = i->next;
j = j->next;
}
p = p->next;
}
while(i) {
p->next = (Node *)malloc(LEN));
p->next->num = i->num;
p = p->next;
i = i->next;
}
while(j) {
p->next = (Node *)malloc(LEN));
p->next->num = j->num;
p = p->next;
j = j->next;
}
p->next = NULL;
p = head;
head = p->next;
free(p);
p = NULL;
return head;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯