数据结构算法--合并两个有序线性链表

【归并】将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表

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中结点的较小者。

数据结构算法--合并两个有序线性链表_第1张图片

之后才开始我们的归并排序算法

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所用的指针–>理解用来标志的作用

数据结构算法--合并两个有序线性链表_第2张图片

r->next=(p!=null)?p:q;
	return listc;//p:q;若p为空?不空放到后面,若空则把q放到后面。

最后这段代码就解释的是9与10了将排序好的910直接放到
listc后即可。
这里一定要有返回值才行,因为函数名前有声明函数的返回值为LinkList
在这里插入图片描述

你可能感兴趣的:(数据结构,算法,链表)