首先读题,题目中说L1,L2都为含头节点的,第一次做的时候没有认真读题以为不带头节点,传出的链表也要求带头节点。
代码
List Merge(List L1,List L2){
List pa,pb,pc,L;
L = (List)malloc(sizeof(struct Node));
pa = L1->Next;
pb = L2->Next; //因为传入的链表带有空的头节点
pc = L;
while (pa && pb)
{
if(pa->Data < pb->Data)
{
pc->Next = pa; //假设pc工作节点指向的为第三个节点,现在把第四个节点pa加在第三个后方
pc = pa; //让工作节点指向第四个节点,方便后续的插入
pa = pa->Next;
}
else if (pa->Data > pb->Data)
{
pc->Next = pb;
pc = pb; //pc = pc->Next 也正确
pb = pb ->Next;
}
else if(pa->Data == pb->Data) //相等
{
pc->Next = pa;
pc = pa;
pa = pa->Next; //如果pa,pb都指向下一个回报错,可能是允许数字重复出现?
}
}
if(pa == NULL) //把剩下的链表直接加在pc的后面
{
pc->Next = pb;
}
else if(pb == NULL)
{
pc->Next = pa;
}
L1->Next = NULL; //因为题目要求输出NULL
L2->Next = NULL;
return L;
}