【归并】将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表
LinkList MergeList(LinkList lista,LinkList listb)
LinkList p,q,r,listc;
p=lista;
q=listb;
if(lista.data<=listb.data)
listc=lista;
r=lista;
p=lista->next;
else
listc=listb;
r=listb;
p=listb->next;
while(p!=null&&q!=null)
{
if(p.data<=q.data)
r->next=p;
r=p;
p=p->next;
else
r->next=q;
r=q;
q=q->next;
}
r->next=(p!=null)?p:q;
return listc;
首先这段代码的意思我先说明一下
LinkList p,q,r,listc;
p=lista;
q=listb;
if(lista.data<=listb.data)
> listc=lista;
r=lista;
p=lista->next;
else
> listc=listb;
r=listb;
p=listb->next;
这里的listc所指向lista和listb中结点的较小者。
之后才开始我们的归并排序算法
while(p!=null&&q!=null)
{
if(p.data<=q.data)
r->next=p;
r=p;
p=p->next;
else
r->next=q;
r=q;
q=q->next;
}
r其实是个listc所用的指针–>理解用来标志的作用
r->next=(p!=null)?p:q;
return listc;//p:q;若p为空?不空放到后面,若空则把q放到后面。
最后这段代码就解释的是9与10了将排序好的9和10直接放到
listc后即可。
这里一定要有返回值才行,因为函数名前有声明函数的返回值为LinkList。