输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需 要合成后的链表满足单调不减规则。用c语编程并计算时间复杂度和空间复杂度
时间: 2023-07-11 10:31:52 浏览: 134
JAVA单链表的简单操作(递增单链表插入数据,链表逆置,链表逆序合成)
好的,以下是用 C 语言实现的代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode)); // 创建虚拟头节点
struct ListNode* cur = dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
cur->next = l1 ? l1 : l2; // 将剩余链表接到后面
return dummy->next;
}
```
时间复杂度为 $O(m+n)$,其中 $m$ 和 $n$ 分别为两个链表的长度,因为需要遍历两个链表,并将它们合并成一个新的链表。空间复杂度为 $O(1)$,因为只需要创建一个虚拟头节点和几个指针变量,不需要额外的空间。
需要注意的是,在 C 语言中需要手动创建和释放内存,所以在代码中需要使用 `malloc` 函数分配内存空间,使用 `free` 函数释放内存空间。
阅读全文