算法,指针,2.15 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试写一算法将这两

算法,指针,
2.15 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n.试写一算法将这两个链表连接在一起,假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算.请分析你的算法的时间复杂度.
x05解:
void MergeList_L(LinkList &ha,LinkList &hb,LinkList &hc)
{
x05LinkList pa,pb;
x05pa=ha;
x05pb=hb;
x05while(pa->next&&pb->next){
x05x05pa=pa->next;
x05x05pb=pb->next;
x05}
x05if(!pa->next){
x05x05hc=hb;
x05x05while(pb->next) pb=pb->next;
x05x05pb->next=ha->next;
x05}
x05else{
x05x05hc=ha;
x05x05while(pa->next) pa=pa->next;
x05x05pa->next=hb->next;
x05}
}
不懂这题啊,虽然天气冷,请高手像我一样不怕打字.帮一步步解释哈,我太笨了,全不懂,还花了我两个小时思考,但却是我的心意.
rabbit_simon 1年前 已收到1个回答 举报

yuss520 幼苗

共回答了26个问题采纳率:96.2% 举报

10点钟已从hi上解决,还没来得及贴上来.现在贴上
例如链表ha有元素:1、2、3、4、5
hb有元素:6、7、8
那么
while(pa->next&&pb->next){
pa=pa->next;
pb=pb->next;
}
初始pa指向元素1,pb指向元素6
第一次pa指向元素2,pb指向元素7
第三次pa指向元素3,pb指向元素8
第四次pa指向元素4,pb指向结尾了
就是先找出那个链表先到尾了,显然是hb
然后到了下面的if语句,pa->next 是有元素的,因此执行if里面的语句
把hb作为链表头,while(pb->next) pb=pb->next使得pb指向hb的尾部,将hb的尾部指针指向ha,因此两个链表连起来了

1年前

3
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.015 s. - webmaster@yulucn.com