List Merge( List L1, List L2 ) ///合并函数
{
//思路是,创建一个新链表L,且三个链表的头指针(老大)L1,L2,L都不要变(都指向头结点),派他们的小弟p1,p2,pL去拉帮结派,或者开除帮众,构建一个新帮派
List p1,p2,pL,L;
L = (List)malloc(sizeof(struct Node));//开帮派必须得开空间啊,就是头结点啦,里面是没有数据的!链表List的名字L就是指向头结点的指针!,所以下面pL=L就可以啦
//malloc返回void* 类型指针,它可以通过类型转换强制转换为任何其它类型的指针
//如果在C++中,可以直接用new来分配内存,可以自动识别内存大小,并分配同类型的指针
p1=L1->Next; //因为L1和L2是给定的带头结点的单链表,所以不能p1 = L1,因为如果p1=L1,下面的p1->Data编译器就会懵逼;
p2=L2->Next;
pL=L;
while(p1&&p2)
{
if(p1->Data <= p2->Data)
{
pL->Next = p1;
pL = p1;
p1 = p1->Next;
}
else
{
pL->Next = p2;
pL = p2;
p2 = p2->Next;
}
}
if(p1)
pL->Next = p1;
else
pL->Next = p2;
//或者
//pL->Next = p1 ? p1 :p2;
L1->Next= NULL;
L2->Next= NULL; //空链表,解散帮众
return L;
}