【正确答案】
【答案解析】LinkedList la;
la=(LinkedList) malloc(sizeof(LNode));
la->next=ha; //申请头结点,以便操作
pa=ha; //pa是ha链表的工作指针
pb=hb; //pb是hb链表的工作指针
pre=la; //pre指向当前待合并结点的前驱
while(pa&&pb)
if(pa->data<pb->data)//处理ha中的数据
{
pre->next=pa:
pre=pa;
pa=pa->next:
}
else if(pa->data>pb->data) //处理hb中的数据
{
R=(LinkedList) malloc (sizeof (LNode)); //申请空间
R->data=pb->data;
pre->next=r;
pre=r; //将新结点链入结果链表
pb=pb->next; //hb链表中工作指针后移
}
else //处理pa->data=pb->data;
pre->next=pa;
Pre=pa;
pa=pa->next; //两结点数据相等时,只将ha的数据链入
pb=pb->next; //不要hb的相等数据
}
if(pa!=null)pre->next=pa; //将两链表中剩余部分链入结果链表
else pre->next=pb;
free(la); //释放头结点,ha、hb指针未被破坏
} //算法Union结束
[解析] 因为两链表已按元素值递增次序排列,将其合并时,均从第一个结点起进行比较,将小的链入链表中,同时后移链表工作指针。如果遇上相等的元素,只需记录一个,并同时向后移动链表工作指针。