线性表习题整理(二)
题目
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后),假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法和时间复杂度
思想
根据给定的两个链表的长度选择较短的链表并找到其尾结点,注意释放长链表的头结点
代码段
Status T(LinkList ha,LinkList hb,LinkList *hc)
{
LinkList pa,pb;
pa=ha;
pb=hb;
if(ha&&hb){
while(pa->next&&pb->next)
{
//循环起到判断pa和pb哪个更短的效果
pa=pa->next;
pb=pb->next;
}
if(!pa->next)
{
//若pa更短,则将hb插到pa的尾部
*hc=ha;
pa->next=hb->next;
}
if(!pb->next)
{
*hc=hb;
pb->next-ha->next;
}
return OK;
}
return ERROR;
}