首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个小疑点

2012-03-02 
一个小问题!/*有两个链表,删除第一个链表与第二个链表有相同学号的那个结点,问题出在最后面那个函数里*/#i

一个小问题!
/*有两个链表,删除第一个链表与第二个链表有相同学号的那个结点,问题出在最后面那个函数里*/
#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的功能,具体的也没细看.

热点排行