#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LA 4
#define LB 5
struct student{
int num;
char name[8];
struct student * next ;
}
a[LA],b[LB];
int main() {
struct student *create(struct student *, int);
struct student *del(struct student*, struct student*);
void print(struct student*);
struct student a[LA]={{101,"Wang"},{102,"Li"},{105,"Zhang"}, {106,"Wei"}};
struct student b[LB]={{103,"Zhang"},{104,"Ma"}, {105,"Chen"},{107,"Guo"},{108,"1ui"}};
struct student *headA= create(a, LA), *headB = create(b, LB), *p;
p = del(headA, headB);
print(p);
return 0;
}
//创建
struct student *create(struct student *h, int n) {
struct student *p, *s, *head;
head = NULL;
int i = 0;
s = (struct student*) malloc(sizeof(struct student));
p = (struct student*) malloc(sizeof(struct student));
p->next = NULL;
head = p;
// 尾插法
do{
s->num = h[i].num;
strcpy(s->name, h[i].name);
p->next = s;
p = s;
s = (struct student*) malloc(sizeof(struct student));
i++;
} while (i<n);
p->next = NULL;
return (head);
}
//删除
struct student *del(struct student* a, struct student* b){
struct student *p = a->next, *q = b->next, *pre;
while (q != NULL) {
if( p == NULL) {
p = a->next;
q = q->next;
}
if(p->num == q->num) {
pre->next = p->next;
p = pre->next;
q = q->next;
break;//求问:为什么这里要break出去才能获得数据?
}
pre = p;
p = p->next;
}
return (a);
}
//输出
void print(struct student* head) {
struct student *p = head->next;
while (p!=NULL) {
printf("%d ", p->num);
p = p->next;
}
}
就是删除函数中
if(p->num == q->num)
语句,要加break才能得到数据,否则就输出为空,不知道是什么原因?