c语言头插法双向链表捉虫

问题遇到的现象和发生背景

某地区有两个地下党行动小组,分别为小组A与小组B。

每个小组有一个以上的成员,构成上下线关系。每一位成员都有自己的代号与等级。地下党基本上都是采取的单线联系,所以接触到的人只有一个或者两个,一个是上线一个是下线。级别较小的为上线。

例如地下党行动小组A的成员有:

狐狸 独狼 云雀 鼹鼠 飞鹰 杜鹃
1 3 7 9 10 11
另一个地下党行动小组B的成员有:

雪松 郁金香 茉莉 冷杉 丁香
2 4 5 6 8
那么杜鹃是飞鹰的下线、飞鹰是杜鹃的上线。但是鼹鼠和杜鹃有可能互不认识。因此鼹鼠的下线只有飞鹰。

给定成员的代号与等级,用 尾插法建立两个地下党行动小组的 双向链表。

要求给定一个组,一个成员名,可以输出该成员的下线。

输入
第1行是两个整数numA、numB,分别表示每个小组含有的成员个数;
接下来的2numA行由等级从低到高(从上线到下线)的顺序依次输入A小组每个成员的代号(字符串)与等级(整数);
接下来的2
numB行由等级从低到高(从上线到下线)的顺序依次输入B小组每个成员的代号(字符串)与等级(整数);
接下来的1行输入一个字符c,c可以为'A'或'B',代表要检索哪个小组;
接下来的1行输入该小组成员的代号name,代表要检索该小组的哪个成员。

输出
输出结果有1行,分别为一个字符串+空格+整数值,字符串代表所要检索的成员下线的代号,数值代表该下线成员的等级。

问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
struct DoubleNode;
typedef struct DoubleNode *PDoubleNode;
struct DoubleNode
{
       char daihao[30];
       int grade;
       PDoubleNode llink,rlink;
};
typedef struct DoubleNode *PDoubleList;

PDoubleList createNulllist_link(void);//创建空表函数 
void locate(PDoubleList pdlist);//查找并输出函数 

int main()
{
    int x,y,i;
    PDoubleNode r,s;//A组的指针 
    PDoubleNode a,b;//B组的指针 
    PDoubleList pdlistA,pdlistB;//AB组的头指针 ,指向双链表头结点 
    scanf("%d%d",&x,&y);//输入A组B组的人数 
    pdlistA=createNulllist_link(); 
    pdlistB=createNulllist_link();//创建AB组的空表 
    r=pdlistA;
    for(i=0;i<x;i++){
                     s=(PDoubleNode)malloc(sizeof(struct DoubleNode));
                     if(s==NULL){
                                 printf("out of space!\n");
                                 return 0;
                                 }
                     scanf("%s%d",s->daihao,&(s->grade));
                     r->llink=s;
                     s->rlink=r;
                     r=s;
                     }
                     s->llink=NULL;//A组尾插法建立双向链表
    a=pdlistB;
    for(i=0;i<y;i++){
                     b=(PDoubleNode)malloc(sizeof(struct DoubleNode));
                     if(b==NULL){
                                 printf("out of space!\n");
                                 return 0;
                                 }
                     scanf("%s%d",b->daihao,&(b->grade));
                     a->llink=b;
                     b->rlink=a;
                     a=b;
                     }
                     b->llink=NULL;//B组尾插法建立双向链表
    int order;
    scanf("%d",&order);//输入序号 (???)

    char group;
    scanf("%c",&group); //输入组名
    if(group=='A'){
                   locate(pdlistA);
                   }
    else if(group=='B'){
                   locate(pdlistB);//查找并输出 
                   }
    system("pause");
    return 0;
}

PDoubleList createNulllist_link(void){//创建空表函数
            PDoubleList pdlist;//头结点指针 
            pdlist= (PDoubleList)malloc(sizeof(struct DoubleNode));//开出头结点 
            if(pdlist!=NULL)pdlist->llink=NULL;
            return (pdlist);
            }

void locate(PDoubleList pdlist){//查找并输出函数
     char name[30];
     scanf("%s",name);//输入代号
     PDoubleNode p;
     p=pdlist->llink;
     while(p!=NULL&&strcmp(p->daihao,name)!=0){
                                               p=p->llink;
                                               }
     if((p->llink)!=NULL)printf("%s %d",p->llink->daihao,p->llink->grade);
     else printf("没有人"); 
} 

这样写就是对的,但int order;
scanf("%d",&order);//输入序号 (???)
是我一开始看错了题写上去的,结果阴错阳差对了;
删去这两行就不对,请问是为什么?