火车订票功能找不到错误在哪了

struct node
{  
   char name[12];         //乘客姓名
   char IDcard[20];        //乘客身份证号码
   int TicketNum;         //订票数
   float FareSum;         //总票价
   struct node *next;      //指针成员
}*head;
struct Dtime
{  
   short year;
   short month;
   short day;
   short hour;
   short minute;
};
struct train
{   
   char terminal[20];          //终点站
   char sequence[20];         //车次
   struct Dtime StartTime;     //发车时间
   float fare;                //票价
   int SpareTicketNum;       //余票数
   struct node *head;         //指针成员,指向该线路第一个订票乘客
   struct train *next;
}*line,*p1,*p2;
void dp()                                      //订票功能 
{
    train *j;
    j=line;
    j->head=line->head;
    char checi[20];
    int  num;
    printf("车次:");
       scanf("%s",checi);
    printf("订票数:");
       scanf("%d",&num); 
    while(line)
    {
        if(strcmp(line->sequence,checi)==0)
        {
            if(line->SpareTicketNum>=num)
              {
                  line->SpareTicketNum-=num;            //余票数减少 
                  head=(struct node *)malloc(sizeof(struct node));
                  printf("姓名:");
                  scanf("%s",head->name); 
                printf("身份证号:");
                  scanf("%s",head->IDcard);
                printf("总票价:%.2f\n",num*j->fare);
                head->TicketNum=num;
                head->FareSum=num*j->fare;
                head->next=NULL;
                while(line->head)
                   line->head=line->head->next;
                line->head=head;
                line->head->next=NULL;
                line->head=j->head;
                line=j;
                break;
              }
            else
              {
                printf("余票数不足,订票失败!\n");
                line=j;
                break;
              }
        }
        line=line->next;
    }
}

我的思路是链表line存列车信息,每个line结点有一个乘客信息链表head。每调用一次dp()函数,就产生一个head结点接入到相应的line链表的head链表。但我多次调用dp()函数输入多组乘客信息到相同列车时,相应的line的head链表只有我最后一次输入的乘客信息,就是head链表没连上,找不到原因了

train *j;
    j=line;
    j->head=line->head;

这直接就崩了吧,j和line你在哪分配空间了啊?

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633