设单链表A = (a1, a2, ..., an),B = (b1, b2, ..., bn),试使用C语言和单链表的结构体写一个按下列规则合并A,B为线性表C的算法,即使得 线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。
时间: 2024-09-21 10:09:54 浏览: 80
在C语言中,我们可以创建一个单链表节点的结构体,并编写一个函数来合并两个已排序的链表。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 创建新节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 合并两个链表
ListNode* mergeSortedLists(ListNode* listA, ListNode* listB) {
if (!listA) return listB; // 如果A为空,返回B
if (!listB) return listA; // 如果B为空,返回A
// 比较A和B的当前节点数据
if (listA->data <= listB->data) {
listA->next = mergeSortedLists(listA->next, listB); // 递归合并剩余部分
return listA;
} else {
listB->next = mergeSortedLists(listA, listB->next);
return listB;
}
}
// 打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 初始化两个示例链表 A 和 B
ListNode* A = createNode(1);
A->next = createNode(3);
A->next->next = createNode(5);
ListNode* B = createNode(2);
B->next = createNode(4);
B->next->next = createNode(6);
// 合并两个链表
ListNode* C = mergeSortedLists(A, B);
// 打印合并后的链表 C
printList(C);
return 0;
}
```
这个程序首先定义了一个链表节点结构体 `ListNode`,然后实现了一个 `mergeSortedLists` 函数,它按照升序合并两个输入链表。在主函数中,我们创建了两个示例链表 A 和 B,然后调用 `mergeSortedLists` 函数得到合并后的链表 C。
阅读全文
相关推荐


















