LinkList Read( ){ LinkList L,s,p; L=(LinkList)malloc(sizeof(LNode)); p=L; L->next=NULL; while(1){ s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&(s->data)); s->next=NULL; if((s->data)==-1){ free(s); break; } p->next=s; p=s; } return L; } //按顺序依次读入元素,生成一个带头结点的单链表,表中元素值排列顺序与输入顺序一致, //若输入-1,则创建链表结束(链表中不包含-1)。此处要求元素值按非递减顺序录入 LinkList Merge( LinkList L1, LinkList L2 ){ LinkList L3,p,s; L3=(LinkList)malloc(sizeof(LNode)); p=L1->next; LinkList q=L2->next; s=L3; if(p==NULL&&q==NULL) return NULL; while(p&&q){ if((p->data)<=(q->data)){ s->next=p; s=p; p=p->next; }else{ s->next=q; s=q; q=q->next; } } s->next=p?p:q; L1->next=NULL; L2->next=NULL; return L3; }给这段代码加注释
时间: 2024-03-23 20:41:12 浏览: 75
```
// 按顺序依次读入元素,生成一个带头结点的单链表,表中元素值排列顺序与输入顺序一致,
// 若输入-1,则创建链表结束(链表中不包含-1)。此处要求元素值按非递减顺序录入
LinkList Read() {
LinkList L, s, p; // 定义链表头指针 L,当前节点指针 s,上一个节点指针 p
L = (LinkList)malloc(sizeof(LNode)); // 创建头结点 L
p = L;
L->next = NULL; // 头结点的 next 指针置为 NULL
while(1) { // 进入循环
s = (LinkList)malloc(sizeof(LNode)); // 创建新节点 s
scanf("%d", &(s->data)); // 读入节点值
s->next = NULL; // 新节点的 next 指针置为 NULL
if((s->data) == -1) { // 如果读入的节点值为 -1,释放该节点并退出循环
free(s);
break;
}
p->next = s; // 将新节点 s 插入到链表 L 的最后一个节点之后
p = s; // 将上一个节点指针 p 指向新节点 s
}
return L; // 返回链表 L
}
// 合并 L1 与 L2。已知 L1 与 L2 中的元素非递减排列,
// 要求合并后的单链表中元素也按值非递减排列。
LinkList Merge(LinkList L1, LinkList L2) {
LinkList L3, p, q, s; // 定义链表头指针 L3,节点指针 p、q、s
L3 = (LinkList)malloc(sizeof(LNode)); // 创建头结点 L3
p = L1->next; // 指针 p 指向 L1 的第一个节点
q = L2->next; // 指针 q 指向 L2 的第一个节点
s = L3; // 指针 s 指向 L3 的头结点
if(p == NULL && q == NULL) return NULL; // 如果 L1 和 L2 都为空,直接返回 NULL
while(p && q) { // 进入循环
if((p->data) <= (q->data)) { // 如果 L1 中的元素值小于等于 L2 中的元素值
s->next = p; // 将 L1 中的节点接到 L3 的最后一个节点之后
s = p; // 更新 s 指针指向最后一个节点
p = p->next; // p 指针指向下一个节点
} else { // 如果 L2 中的元素值小于 L1 中的元素值
s->next = q; // 将 L2 中的节点接到 L3 的最后一个节点之后
s = q; // 更新 s 指针指向最后一个节点
q = q->next; // q 指针指向下一个节点
}
}
s->next = p ? p : q; // 将 L1 或 L2 中剩余的节点接到 L3 的最后一个节点之后
L1->next = NULL; // 将 L1 的 next 指针置为 NULL
L2->next = NULL; // 将 L2 的 next 指针置为 NULL
return L3; // 返回链表 L3
}
```
阅读全文