给出一个c语言实现的合并两个单向链表的完整代码
时间: 2024-02-28 12:54:16 浏览: 99
c语言实现两个单链表的交叉合并方式
5星 · 资源好评率100%
下面是一个 C 语言实现的合并两个单向链表的完整代码,其中包含了创建链表、遍历链表、合并链表等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单向链表结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 创建单向链表
Node *createList(int arr[], int len) {
Node *head = NULL, *tail = NULL;
for (int i = 0; i < len; i++) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 遍历单向链表
void traverseList(Node *head) {
Node *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 合并两个单向链表
Node *mergeLists(Node *l1, Node *l2) {
Node *head = NULL, *tail = NULL;
while (l1 && l2) {
if (l1->data < l2->data) {
if (head == NULL) {
head = tail = l1;
} else {
tail->next = l1;
tail = l1;
}
l1 = l1->next;
} else {
if (head == NULL) {
head = tail = l2;
} else {
tail->next = l2;
tail = l2;
}
l2 = l2->next;
}
}
if (l1) {
if (head == NULL) {
head = l1;
} else {
tail->next = l1;
}
}
if (l2) {
if (head == NULL) {
head = l2;
} else {
tail->next = l2;
}
}
return head;
}
// 测试代码
int main() {
int arr1[] = {1, 3, 5, 7, 9};
int arr2[] = {2, 4, 6, 8, 10};
Node *l1 = createList(arr1, 5);
Node *l2 = createList(arr2, 5);
Node *l3 = mergeLists(l1, l2);
traverseList(l3);
return 0;
}
```
在上面的代码中,首先定义了一个单向链表结构体 Node,包含了数据域和指向下一个节点的指针域。然后定义了三个函数,分别是 createList、traverseList 和 mergeLists,用于创建链表、遍历链表和合并链表。最后在主函数中调用这些函数进行测试。
阅读全文