您的位置:首页 > 编程语言 > C语言/C++

合并两个有序链表,合并后依然有序(C语言)

2016-04-14 19:57 525 查看
PSListNode MergeList(PSListNode pL1, PSListNode pL2)
{
PSListNode pNewNode = NULL;
PSListNode pListNode1 = pL1;
PSListNode pListNode2 = pL2;
PSListNode pNode = NULL;
if (NULL == pListNode1)
{
return pListNode2;
}
else if (NULL == pListNode2)
{
return pListNode1;
}
else
{
//先把新链表的头结点的指针找到,每次取两个链表中保存的数据较小的结点后插到新链表中
if (pListNode1->data > pListNode2->data)
{
pNode = pListNode2;
pListNode2 = pListNode2->pNextNode;
pNewNode = pNode;
}
else
{
pNode = pListNode1;
pListNode1 = pListNode1->pNextNode;
pNewNode = pNode;
}
//这样就只剩下其中一个链表的未比较的部分了,把它链接到新链表的最后即可
while ((NULL != pListNode1) && (NULL != pListNode2))
{
if (pListNode1->data > pListNode2->data)
{
pNode->pNextNode = pListNode2;
pListNode2 = pListNode2->pNextNode;
pNode = pNode->pNextNode;
}
else
{
pNode->pNextNode = pListNode1;
pListNode1 = pListNode1->pNextNode;
pNode = pNode->pNextNode;
}
}
//把其中一个链表剩下的部分链接到新链表的最后
if (NULL == pListNode1)
{
pNode->pNextNode = pListNode2;
return pNewNode;
}
else
{
pNode->pNextNode = pListNode1;
return pNewNode;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: