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

链表的题不懂啊请问

2012-03-09 
链表的题不懂啊,请教!设pa和pb分别为两个升序排列的单链标的头指针,函数merge把这两个链表合并成按一个升

链表的题不懂啊,请教!
设pa和pb分别为两个升序排列的单链标的头指针,函数merge把这两个链表合并成按一个升序排列的单链表pc.
合并的算法是:从两表的第一个节点开始顺链逐个将对应数据元素进行比较,并复制小者并插入到pc表尾,如果对应数据元素相等,只取pa的元素。当两表中之一已到表尾,则复制另一个链表的剩余部分,插到pc表尾。为了减少程序中的判断,pc表增设一个表头结点,合并表运算结束后再把它删除。函数返回值是pc表的头指针。设pa和pb分别指向两个表当前搜索结点,p指向pc表的当前表尾结点。
#define   DJ   struct   node
DJ   {   int   data;
        DJ   *link;};
DJ   *merge(DJ   *pa,DJ   *pb)
{DJ   *p,*q,*pc;
pc=   (DJ*)malloc(sizeof(DJ);
while   ([9]){
q=(DJ*)malloc(sizeof(DJ);
if(pb-> data <pa-> data;
      [10];}
else
    {q-> data=pa-> data;
      pa=pa-> link;
    if(pb-> data==pa-> data)[11];
    }
    p-> link=q;
p=[12];
}
while(pa!=NULL)
        {q=(DJ*)malloc(sizeof(DJ);
          q-> data=pa-> data;
          pa=pa-> link;
          p-> link=q;
          p=q;
          }  
p-> link=NULL;
p=pc;
pc=[13]
free(p);
return(pc);
}
请教9.10.11.12.13空填什么啊,快考试了,对链表的题还是很头痛,麻烦对答案讲解一下!

[解决办法]
9. pa!=NULL&&pb!=NULL
10.q-> data=pb-> data; pb=pb-> link;
11.pb=pb-> link;
12.p=p-> link;
13.pc=p-> link;

另,该 合并程序缺少一个部分: while(pb!=NULL){...}
[解决办法]
佩服jixingzhong(瞌睡虫·星辰) ,全对,LZ放心用,我也学习le
-----------------------


void printList(pDJ currentPtr);

DJ *merge(DJ *pa,DJ *pb){
DJ *p,*q,*pc;
pc= (DJ*)malloc(sizeof(DJ));
p= (DJ*)malloc(sizeof(DJ));
pc=p;
while (pa!=NULL&&pb!=NULL){//[9]){
q=(DJ*)malloc(sizeof(DJ));
if(pb-> data <pa-> data){
q-> data=pb-> data; //[10]
pb=pb-> link; //[10]
}
else
{
q-> data=pa-> data;


if(pb-> data==pa-> data){
pb=pb-> link; //[11];
}
pa=pa-> link;
}

p-> link=q;
p=p-> link; //[12];
}

while(pa!=NULL)
{
q=(DJ*)malloc(sizeof(DJ));
q-> data=pa-> data;
pa=pa-> link;
p-> link=q;
p=q;
}
while(pb!=NULL)
{
q=(DJ*)malloc(sizeof(DJ));
q-> data=pb-> data;
pb=pb-> link;
p-> link=q;
p=q;
}
p-> link=NULL;
p=pc;
pc=p-> link;//[13];
free(p);
return(pc);
}

热点排行