33,008
社区成员
发帖
与我相关
我的任务
分享
Link * Meger(Link *a,Link *b)
{
Link *h=a,*p,*q;
while(b)
{
for(p=h;p&&p->val<b->val;q=p,p=p->next)
;
if(p==h)
{
_____;
}
else
{
_____;
}
p=b;
b=b->next;
________;
}
return h;
}
Link * Meger(Link *a,Link *b)
{
Link *h=a,*p,*q;
while(b)
{
//q最后指向最后一个比b节点元素小的节点,p指向第一个大于等于b节点元素的节点。
for(p=h;p&&p->val<b->val;q=p,p=p->next)
;
if(p==h) //p指向头节点,说明没有比b节点元素小的或者a链表为空
{
h = b; //所以第一个元素应该是b
}
else //如果有比b小的,则让链表中最后一个比b小的元素q作为b的前驱
{
q->next = b;
}
q=b; //用q记录下b,不能是p=b;否则就找不到q指向的节点了,链表就断了
b=b->next; //b后移一个节点
q->next = p; //p指向第一个大于等于b节点的元素,所以是b的后继
}
return h;
}