一个小问题!
/*有两个链表,删除第一个链表与第二个链表有相同学号的那个结点,问题出在最后面那个函数里*/
#include <stdio.h>
#include <malloc.h>
#define NULL 0
typedef struct student{
long num;
char name[20];
struct student *next;
}S;
main(){
S * MD();
void PRINT(S *);
S * DEL_NUM(S *,S *);
S *head1,*head2;
head1=MD();
head2=MD();
puts( "LIST 1 ");
PRINT(head1);
puts( "LIST 2 ");
PRINT(head2);
head1=DEL_NUM(head1,head2);
puts( "DEL LIST 1 ");
PRINT(head1);
}
S * MD(){
S *head,*p1,*p2;
head=NULL;
p1=(S *)malloc(sizeof(S));
puts( "Please input a student num and name ");
scanf( "%ld %s ",&p1-> num,p1-> name);
if (p1-> num)
{head=p1;
do {p2=p1;
p1=(S *)malloc(sizeof(S));
scanf( "%ld %s ",&p1-> num,p1-> name);
p2-> next=p1;
}
while(p1-> num);
p2-> next=NULL;
}
return(head);
}
void PRINT(S *p){
if (p==NULL) puts( "LIst is NULL ");
else do{
printf( "%ld %s\n ",p-> num,p-> name);
p=p-> next;
}
while(p);
}
/*就是下面这个函数*/
S * DEL_NUM(S *p1,S *p2){
S *head,*p,*head2;
head2=p2; /*指向第二个链表的首地址*/
head=p1; /*指向第一个链表的首地址*/
p=p1;
while(p1)
{
while(p2);
{if (p2-> num!=p1-> num) {p2=p2-> next;continue;}
else {if (p1==head) {head=p1-> next;break;}
else p-> next=p1-> next; /*还有一个问题,如里这里写成else {p-> next=p1-> next;break;}就会有错误提示*/
}
if (p1-> num==p2-> num) break;
}
p2=head2;
p=p1;
p1=p1-> next;
}
return(head);
}
/*执行这个函数时没有什么任何反应,郁闷!大家帮忙看看问题出在那里*/
[解决办法]
老大-----> while(p2); 你这个后面有个分号了,当然死循环了..
还有在那句加了break也没什么错误提示.
输入数据能实现LZ的功能,具体的也没细看.