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;
}