在c++中使用线性表实现两个表的简单等值连接,并分析链接算法的时间复杂度,给我一个这样的代码
时间: 2024-09-23 09:01:12 浏览: 42
在C++中,线性表通常通过链表来实现,对于两个链表的等值连接,可以遍历每个列表并比较元素是否相等。以下是简单的示例代码:
```cpp
#include <iostream>
// 链表节点结构体
struct ListNode {
int data;
ListNode* next;
ListNode(int val = 0) : data(val), next(nullptr) {}
};
// 等值连接两个链表
ListNode* connectTwoLists(ListNode* headA, ListNode* headB) {
ListNode dummy(0); // 创建虚拟头结点
ListNode* current = &dummy; // 指针初始化为虚拟头
while (headA && headB) { // 只要其中一个链表还有元素
if (headA->data <= headB->data) { // 如果A的元素小于等于B
current->next = headA;
headA = headA->next;
} else { // 否则
current->next = headB;
headB = headB->next;
}
current = current->next; // 移动当前指针
}
// 将剩余的一个链表添加到结果中(如果有的话)
if (headA)
current->next = headA;
else
current->next = headB;
return dummy.next; // 返回结果链表的头结点
}
int main() {
// 示例链表构建
ListNode* listA = new ListNode(1);
listA->next = new ListNode(3);
listA->next->next = new ListNode(5);
ListNode* listB = new ListNode(2);
listB->next = new ListNode(4);
listB->next->next = new ListNode(6);
ListNode* result = connectTwoLists(listA, listB);
// 打印结果链表
while (result) {
std::cout << result->data << " ";
result = result->next;
}
std::cout << "\n";
delete listA;
delete listB;
return 0;
}
```
时间复杂度分析:这个算法的时间复杂度主要取决于两个输入链表中最长的那个。由于我们只遍历一次每个链表,所以时间复杂度是O(M + N),其中M和N分别是两个链表的长度。空间复杂度是O(1),因为我们只使用了几个额外的指针变量。
阅读全文