帮我写一个用c语言实现两个随机单链表合并的代码
时间: 2024-04-11 10:28:33 浏览: 113
当然可以!以下是一个用 C 语言实现两个随机单链表合并的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 合并链表
Node* mergeLists(Node* list1, Node* list2) {
// 如果其中一个链表为空,则直接返回另一个链表
if (list1 == NULL) {
return list2;
}
if (list2 == NULL) {
return list1;
}
// 定义一个新链表的头结点
Node* head = NULL;
// 指向新链表当前节点的指针
Node* current = NULL;
// 比较两个链表的节点,将较小的节点插入到新链表
while (list1 != NULL && list2 != NULL) {
if (list1->data <= list2->data) {
if (head == NULL) {
head = current = list1;
} else {
current->next = list1;
current = current->next;
}
list1 = list1->next;
} else {
if (head == NULL) {
head = current = list2;
} else {
current->next = list2;
current = current->next;
}
list2 = list2->next;
}
}
// 将剩余节点插入到新链表
if (list1 == NULL) {
current->next = list2;
} else {
current->next = list1;
}
return head;
}
// 打印链表
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
// 创建链表1:1 -> 3 -> 5 -> 7
Node* list1 = createNode(1);
list1->next = createNode(3);
list1->next->next = createNode(5);
list1->next->next->next = createNode(7);
// 创建链表2:2 -> 4 -> 6 -> 8
Node* list2 = createNode(2);
list2->next = createNode(4);
list2->next->next = createNode(6);
list2->next->next->next = createNode(8);
// 合并链表
Node* mergedList = mergeLists(list1, list2);
// 打印合并后的链表
printf("合并后的链表:");
printList(mergedList);
return 0;
}
```
这个代码演示了如何创建两个随机单链表,然后将它们合并成一个新的链表,并打印合并后的链表。你可以根据需要修改链表的值和长度。希望对你有帮助!如果有任何问题,请随时问我。
阅读全文