c语言合并单链表
时间: 2023-08-10 08:15:33 浏览: 96
假设有两个单链表A和B,我们需要将它们合并成一个单链表C,那么可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node, *LinkedList;
// 创建单链表
LinkedList createList(int n) {
LinkedList head, p, q;
head = (LinkedList)malloc(sizeof(Node)); // 创建头节点
head->next = NULL; // 头节点指针域置为空
q = head; // 令q指向头节点
for (int i = 1; i <= n; i++) {
p = (LinkedList)malloc(sizeof(Node)); // 创建新节点
printf("请输入第%d个节点的值:", i);
scanf("%d", &p->data);
p->next = NULL; // 新节点指针域置为空
q->next = p; // 将新节点插入链表中
q = p; // q指向新节点
}
return head; // 返回头节点
}
// 合并单链表
LinkedList mergeList(LinkedList A, LinkedList B) {
LinkedList C, p, q, r;
p = A->next; // p指向链表A的第一个节点
q = B->next; // q指向链表B的第一个节点
C = (LinkedList)malloc(sizeof(Node)); // 创建头节点
C->next = NULL; // 头节点指针域置为空
r = C; // 令r指向头节点
while (p && q) { // 当p和q都不为空时,执行以下操作
if (p->data < q->data) { // 如果A链表当前节点的值小于B链表当前节点的值
r->next = p; // 将A链表当前节点插入到C链表中
p = p->next; // A链表指针后移
} else { // 否则
r->next = q; // 将B链表当前节点插入到C链表中
q = q->next; // B链表指针后移
}
r = r->next; // C链表指针后移
}
if (p) { // 如果A链表还有剩余节点
r->next = p; // 将剩余节点插入到C链表中
}
if (q) { // 如果B链表还有剩余节点
r->next = q; // 将剩余节点插入到C链表中
}
free(A); // 释放A链表头节点的空间
free(B); // 释放B链表头节点的空间
return C; // 返回C链表的头节点
}
// 输出单链表
void printList(LinkedList head) {
LinkedList p = head->next; // p指向链表的第一个节点
while (p) { // 当p不为空时,执行以下操作
printf("%d ", p->data); // 输出节点的值
p = p->next; // 指针后移
}
printf("\n");
}
int main() {
LinkedList A, B, C;
int n, m;
printf("请输入链表A的长度:");
scanf("%d", &n);
A = createList(n);
printf("请输入链表B的长度:");
scanf("%d", &m);
B = createList(m);
C = mergeList(A, B);
printf("合并后的链表为:");
printList(C);
return 0;
}
```
注:以上代码仅供参考,实际使用中需根据具体情况进行修改。
阅读全文