使用c语言,将两个递增的单链表融成一个新的递减的单链表;
时间: 2024-03-24 16:40:50 浏览: 56
以下是将两个递增的单链表融成一个新的递减的单链表的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int val;
struct Node* next;
} Node;
Node* mergeLists(Node* l1, Node* l2) {
// 如果其中一个链表为空,则直接返回另一个链表
if (!l1) return l2;
if (!l2) return l1;
Node* head = NULL;
Node* cur = NULL;
// 逐个比较两个链表的节点,并将较大的节点插入新链表头部
while (l1 && l2) {
if (l1->val > l2->val) {
Node* tmp = l1;
l1 = l1->next;
tmp->next = head;
head = tmp;
} else {
Node* tmp = l2;
l2 = l2->next;
tmp->next = head;
head = tmp;
}
}
// 将剩余的节点插入新链表头部
while (l1) {
Node* tmp = l1;
l1 = l1->next;
tmp->next = head;
head = tmp;
}
while (l2) {
Node* tmp = l2;
l2 = l2->next;
tmp->next = head;
head = tmp;
}
return head;
}
int main() {
// 构造两个递增的单链表
Node* l1 = malloc(sizeof(Node));
l1->val = 1;
l1->next = malloc(sizeof(Node));
l1->next->val = 3;
l1->next->next = malloc(sizeof(Node));
l1->next->next->val = 5;
l1->next->next->next = NULL;
Node* l2 = malloc(sizeof(Node));
l2->val = 2;
l2->next = malloc(sizeof(Node));
l2->next->val = 4;
l2->next->next = malloc(sizeof(Node));
l2->next->next->val = 6;
l2->next->next->next = NULL;
// 融合两个链表
Node* l3 = mergeLists(l1, l2);
// 打印新链表
while (l3) {
printf("%d ", l3->val);
l3 = l3->next;
}
printf("\n");
return 0;
}
```
这段代码的核心思想是:逐个比较两个链表的节点,并将较大的节点插入新链表头部。最后得到的新链表是递减的,因为新节点都是插在链表头部的。
阅读全文