1. 程式人生 > >合併兩個有序連結串列,合併後依然有序

合併兩個有序連結串列,合併後依然有序

pNode MergeSList(pList plist1, pList plist2)
{
	pNode pNewHead = NULL;//新連結串列
	pNode pTail = NULL;//新連結串列的尾指標
	pNode pL1 = plist1;
	pNode pL2 = plist2;
	if (plist1 == NULL || plist2 == NULL)
	{
		return plist1 == NULL ? plist2 : plist1;
	}
	//兩個連結串列都不為空
	if (pL1->data < pL2->data)//先向新連結串列中放入一個結點
	{
		pNewHead = pL1;
		pL1 = pL1->next;
	}
	else
	{
		pNewHead = pL2;
		pL2 = pL2->next;
	}
	//此時新連結串列中已經有了一個結點,這個結點既是新連結串列的第一個結點,也是最後一個結點
	pTail = pNewHead;
	//這時該做的是向新連結串列中尾插結點
	while (pL1 && pL2)
	{
		//升序
		if (pL1->data < pL2->data)
		{
			pTail->next = pL1;
			pL1 = pL1->next;
		}
		else
		{
			pTail->next = pL2;
			pL2 = pL2->next;
		}
		pTail = pTail->next;
	}
	//這時,必然至少有一個連結串列走到末尾
	if (pL1)
	{
		pTail->next = pL1;
	}
	else
	{
		pTail->next = pL2;
	}
	return pNewHead;
}