已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。请给出完整可直接运行的C语言代码
时间: 2024-10-11 15:00:53 浏览: 74
在C语言中,我们可以创建一个结构体表示链表节点,并编写一个函数来合并两个非降序链表。首先,我们需要定义链表节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建新节点
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 合并两个链表函数
ListNode* mergeSortedLists(ListNode* head1, ListNode* head2) {
// 定义辅助变量
ListNode* dummyHead = (ListNode*)malloc(sizeof(ListNode)); // 链表头节点
dummyHead->next = head1;
ListNode* current = dummyHead;
while (head1 != NULL && head2 != NULL) {
if (head1->val <= head2->val) {
current->next = head1;
head1 = head1->next;
} else {
current->next = head2;
head2 = head2->next;
}
current = current->next;
}
// 如果其中一个链表还有剩余元素,则添加到结果链表的尾部
if (head1 != NULL) {
current->next = head1;
} else {
current->next = head2;
}
return dummyHead->next; // 返回合并后的链表头
}
```
这个`mergeSortedLists`函数会合并两个已排序的链表,保持合并后的链表也是非降序的。如果需要运行此代码,你需要先创建链表节点并填充数据,然后传入链表头作为函数参数。
阅读全文