本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
其中List结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
List Merge( List L1, List L2 )
{
List L = (List)malloc(sizeof(struct Node));
List L3 = L;
List P = L1 -> Next;
List Q = L2 -> Next;
while(P && Q){
if(P -> Data < Q -> Data){
L3 -> Next = P;
P = P -> Next;
}else{
L3 -> Next = Q;
Q = Q -> Next;
}
L3 = L3 -> Next;
}
L3 -> Next = NULL;
if(P){
L3 -> Next = P;
P = P -> Next;
}
if(Q){
L3 -> Next = Q;
Q = Q -> Next;
}
//L3 -> Next = NULL;
L1 -> Next = NULL;
L2 -> Next = NULL;
return L;
}
疑问点
1.后面的if改为while会出错
2.L3 -> Next = NULL;的位置放在下面会报错