#include <stdio.h> 
#include <string.h>
#include <stdlib.h> 

typedef struct linknode 
{ 
	int num;
	char name[20];
	struct linknode *next; 
}node; 

node *creat() 
{ 
	node *h = NULL,*s,*t;
	int d;
	int i = 1; 
	char name1[20];
	while(1) 
	{ 
		printf("输入第%d结点的学号,姓名\n",i); 
		scanf("%d%s",&d,&name1); 
		if(d == 0)
			break; 
		if(i == 1) 
		{ 
			h = (node *)malloc(sizeof(node)); 
			h->num = d; 
			strcpy(h->name,name1);
			h->next = NULL; 
			t = h; 
		} 
		else 
		{ 
			s = (node *)malloc(sizeof(node)); 
			s->num = d; 
			strcpy(s->name,name1);
			s->next = NULL; 
			t->next = s; 
			t = s;
		} 
		i++; 
	} 
	return h; 
} 
void print(node *h) 
{ 
	node *p = h; 
	if(p == NULL) 
		printf("空表\n"); 
	while(p != NULL) 
	{ 
		printf("%d %s\n",p->num,p->name); 
		p = p->next; 
	} 
	printf("\n");
} 

node *link(node *ha,node *hb) 
{ 
	node *r,*head,*s,*p,*q; 
	head =(node *)malloc(sizeof(node)); 
	head->next = NULL; 
	r = head; 
	p = ha; 
	while(p!=NULL) 
	{ 
		q = hb; 
		while((q != NULL) && (p->num != q->num)) 
			q = q->next; 
		if(q != NULL) 
		{ 
			r->next = p->next; 
			free(p); 
			p = r->next; 
		} 
		else 
		{ 
			r->next = p; 
			r = p; 
			p = p->next; 
			r->next = NULL; 
		} 
	} 

	s = head; 
	head = head->next; 
	free(s); 
	return head; 
} 
int main() 
{ 
	node *ha,*hb,*s; 
	printf("\n请输入链表a的信息,学号等于零时结束输入:格式(学号 姓名)\n");
	ha = creat();
	printf("\n链表a的信息为:\n");
	print(ha); 
	printf("\n请输入链表b的信息,学号等于零时结束输入:格式(学号 姓名)\n");
	hb = creat(); 
	printf("\n链表b的信息为:\n");
	print(hb); 
	s = link(ha,hb); 
	printf("\n删除后的链表信息为:\n");
	print(s);
	return 0; 
}