用C语言编写一个程序设单链表A = (a1, a2, ..., an),B = (b1, b2, ..., bn),试使用C语言和单链表的结构体写一个按下列规则合并A,B为线性表C的算法,线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。
时间: 2024-09-21 22:09:44 浏览: 44
为了在C语言中合并两个已排序的单链表A和B,并将结果保存到C表中,你可以创建一个新的链表结构,同时利用A和B原有的节点空间。首先,我们需要定义链表节点结构:
```c
// 定义链表节点结构
typedef struct ListNode {
int data; // 节点数据
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
```
然后,我们可以定义合并函数`mergeLists`:
```c
ListNode* mergeLists(ListNode* A, ListNode* B) {
// 创建新的头节点
ListNode* C = (ListNode*)malloc(sizeof(ListNode));
C->data = -1; // 初始化新链表,设置一个虚拟的首元素,用于后续比较
C->next = NULL;
ListNode* currentC = C; // 当前正在处理的新链表C的位置
while (A != NULL && B != NULL) { // 只有当A、B都不为空时
if (A->data <= B->data) { // 如果A的数据小于等于B的数据
currentC->next = A; // 将A添加到C链表中
A = A->next; // 移动A到下一个节点
} else { // 否则,A的数据大于B的数据
currentC->next = B; // 将B添加到C链表中
B = B->next; // 移动B到下一个节点
}
currentC = currentC->next; // 更新currentC指向下一个位置
}
// 添加剩余列表,如果其中一个还存在
if (A != NULL) {
currentC->next = A;
} else {
currentC->next = B;
}
return C->next; // 返回新链表C的头节点
}
```
这个函数会返回合并后的链表C的头节点。请注意,在实际应用中,你需要确保`malloc`分配的内存足够存放新链表的所有元素。
阅读全文