L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
List Merge(List L1, List L2)
{
List tmp1, tmp2, L, head;
head = (List)malloc(sizeof(struct Node));
L = head; //储存头节点以供返回.
tmp1 = L1->Next; //需要临时指针代替L1 L2,否则L1 L2头指针无法返回NULL,达不到条件.
tmp2 = L2->Next;
while (tmp1 && tmp2) {
if (tmp1->Data < tmp2->Data) {
L->Next = tmp1;
tmp1 = tmp1->Next;
}
else {
L->Next = tmp2;
tmp2 = tmp2->Next;
}
L = L->Next;
}
for (; tmp1; tmp1 = tmp1->Next, L=L->Next) L->Next = tmp1; //这里也可以将tmp指针直接赋给L->Next
for (; tmp2; tmp2 = tmp2->Next, L=L->Next) L->Next = tmp2;
L1->Next = NULL; //两指针为NULL,达到条件.
L2->Next = NULL;
return head;
}