设单链表A = (a1, a2, ..., an),B = (b1, b2, ..., bn),试使用C语言和单链表的结构体写一个按下列规则合并A,B为线性表C的算法,即使得
时间: 2024-09-21 16:11:57 浏览: 50
假设我们有以下定义的单链表结构体:
```c
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
```
为了按照规则合并两个已排序的单链表A和B,我们可以编写如下的C语言算法:
```c
void mergeSortedLists(Node* A, Node* B, Node** C) {
Node* dummy = (Node*)malloc(sizeof(Node)); // 创建虚拟头结点
*C = dummy;
Node* current = dummy; // 当前节点
// 比较并链接节点
while (A && B) {
if (A->data <= B->data) {
current->next = A;
A = A->next;
} else {
current->next = B;
B = B->next;
}
current = current->next;
}
// 添加剩余链表的节点(如果有的话)
if (A) {
current->next = A;
} else if (B) {
current->next = B;
}
// 结束后释放dummy指针,它不再有用
free(dummy);
}
```
这个函数接受两个已排序的链表头指针`A`和`B`以及一个指向结果链表头的指针`C`。它首先创建一个虚拟头结点`dummy`,然后通过循环对比`A`和`B`的节点值,将较小的节点链接到结果链表中。当其中一个链表遍历完毕,就直接将剩余的链表链接到结果链表的末尾。
阅读全文