c语言实现输入两个**有序(升序)**链表 A、B,请将其进行合并为一个**有序(降序)**链表 如:
时间: 2023-09-03 11:08:17 浏览: 62
将两个升序链表A、B合并到C,并使C成为降序
5星 · 资源好评率100%
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL) {
return l2;
}
if (l2 == NULL) {
return l1;
}
ListNode* head = NULL;
if (l1->val >= l2->val) {
head = l1;
head->next = mergeTwoLists(l1->next, l2);
}
else {
head = l2;
head->next = mergeTwoLists(l1, l2->next);
}
return head;
}
int main() {
int n, m, val;
scanf("%d%d", &n, &m);
ListNode* l1 = NULL;
ListNode* l2 = NULL;
ListNode* node = NULL;
for (int i = 0; i < n; i++) {
scanf("%d", &val);
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
new_node->val = val;
new_node->next = NULL;
if (l1 == NULL) {
l1 = new_node;
node = l1;
}
else {
node->next = new_node;
node = node->next;
}
}
for (int i = 0; i < m; i++) {
scanf("%d", &val);
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
new_node->val = val;
new_node->next = NULL;
if (l2 == NULL) {
l2 = new_node;
node = l2;
}
else {
node->next = new_node;
node = node->next;
}
}
ListNode* l3 = mergeTwoLists(l1, l2);
while (l3 != NULL) {
printf("%d ", l3->val);
l3 = l3->next;
}
return 0;
}
```
输入格式:
第一行两个整数 n 和 m,分别表示链表 A 和 B 的长度。
接下来 n 行,每行一个整数,表示链表 A 中的元素。
接下来 m 行,每行一个整数,表示链表 B 中的元素。
输出格式:
一行,按照降序输出合并后的链表。
输入样例:
3 4
1
3
5
2
4
6
8
输出样例:
8 6 5 4 3 2 1
阅读全文