首页 > 代码库 > 链表归并代码

链表归并代码

void mergelist(list La,list Lb,list &Lc)
{
	//已知线性表LA和LB中的数据元素按值非递减排列
	//归并LA和LB得到新的线性表LC,LC中的元素也按值非递减

	Initlist(Lc);//初始化一个新的链表LC
	i=j=1;k=0;
	La_len=ListLength(La);//分别求出La和Lb的长度
	Lb_len=ListLength(Lb);//La和Lb都非空。
	{
		GetElem(La,i,ai);
		GetElem(Lb,i,bj);
		if(ai<=bj)//如果ai<bj,那么就让ai插入链表Lc中。
		{
			ListInsert(Lc,++k,ai);
			i++;//让链表La中的下一个元素继续和Lb中的元素比较。
		}
		else
		{
			ListInsert(Lc,++k,bj);//如果ai>bj,那么就让bj插入到链表Lc中
			j++;
		}
	}

	while((i<=La_len)&&(j>Lb_len))//当最后链表La还有数值,而Lb没有数值的时候
	{
		GetElem(La,i++,ai);//让所有链表La的数值都插入到Lc链表中
		ListInsert(Lc,k++,ai);
	}

	while((j<=Lb_len)&&(i>Lb_len))//当最后链表Lb还有数值,而La没有数值的时候
	{
		GetElem(La,j++,bj);
		ListInsert(Lc,k++,bi);//让所有链表Lb的数值都插入到Lc链表中
	}
}

链表归并代码