c语言代码
时间: 2023-07-30 22:07:16 浏览: 46
下面是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node* next;
} Node;
Node* mergeLists(Node* A, Node* B) {
// 如果A和B中有一个为空,则直接返回另一个
if (A == NULL) {
return B;
}
if (B == NULL) {
return A;
}
// 初始化链表C的头节点
Node* C = NULL;
if (A->val < B->val) {
C = A;
A = A->next;
} else {
C = B;
B = B->next;
}
// 指向链表C的指针和较小节点所在的链表的指针都向后移动一个节点
Node* cur = C;
while (A != NULL && B != NULL) {
if (A->val < B->val) {
cur->next = A;
A = A->next;
} else if (B->val < A->val) {
cur->next = B;
B = B->next;
} else {
// 如果A和B的值相等,则只将一个节点添加到链表C中
cur->next = A;
A = A->next;
B = B->next;
}
cur = cur->next;
}
// 将剩余的链表链接到链表C的尾部
if (A != NULL) {
cur->next = A;
}
if (B != NULL) {
cur->next = B;
}
return C;
}
int main() {
// 初始化链表A和B
Node* A = (Node*)malloc(sizeof(Node));
A->val = 1;
Node* A1 = (Node*)malloc(sizeof(Node));
A1->val = 3;
Node* A2 = (Node*)malloc(sizeof(Node));
A2->val = 5;
A2->next = NULL;
A1->next = A2;
A->next = A1;
Node* B = (Node*)malloc(sizeof(Node));
B->val = 2;
Node* B1 = (Node*)malloc(sizeof(Node));
B1->val = 4;
Node* B2 = (Node*)malloc(sizeof(Node));
B2->val = 6;
B2->next = NULL;
B1->next = B2;
B->next = B1;
// 合并链表A和B
Node* C = mergeLists(A, B);
// 打印链表C
printf("Merged List:\n");
while (C != NULL) {
printf("%d ", C->val);
C = C->next;
}
printf("\n");
return 0;
}
```
注意,在实现过程中,我们需要特别注意处理链表中的相同元素,避免出现重复的情况。