编写完整的C++语言程序完成下列实验任务: 3、自学下列课件,实现单链表的复制。单链表中各结点的值和结点个数等自定
时间: 2024-10-10 08:11:00 浏览: 34
为了帮助您编写C++代码来完成单链表的复制,这里是一个简单的示例。假设您的链表节点定义如下:
```cpp
struct ListNode {
int val; // 节点的值
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
```
您可以创建两个链表,一个作为原始链表,另一个作为目标链表。以下是单链表复制的完整C++代码:
```cpp
#include <iostream>
// 函数声明,用于复制原链表
ListNode* copyList(ListNode* head);
int main() {
// 创建原始链表
ListNode* original_list = new ListNode(1);
original_list->next = new ListNode(2);
original_list->next->next = new ListNode(3);
original_list->next->next->next = nullptr; // 设置最后一个节点为nullptr
// 获取原始链表的长度
int length = 0;
ListNode* temp = original_list;
while (temp != nullptr) {
length++;
temp = temp->next;
}
// 打印原始链表
std::cout << "Original List: ";
for (int i = 0; i < length; i++) {
std::cout << original_list->val << " ";
original_list = original_list->next;
}
std::cout << "\n";
// 使用copyList函数复制链表
ListNode* copied_list = copyList(original_list);
// 打印复制后的链表
std::cout << "Copied List: ";
for (int i = 0; i < length; i++) {
std::cout << copied_list->val << " ";
copied_list = copied_list->next;
}
std::cout << "\n";
// 清理内存
delete original_list;
return 0;
}
// 单链表复制函数
ListNode* copyList(ListNode* head) {
if (head == nullptr) {
return nullptr;
}
// 创建新的节点
ListNode* new_head = new ListNode(head->val);
ListNode* new_current = new_head;
// 遍历原链表并复制每个节点
ListNode* old_current = head;
while (old_current != nullptr) {
new_current->next = new ListNode(old_current->val);
new_current = new_current->next;
old_current = old_current->next;
}
return new_head;
}
```
这段代码首先创建了一个原始链表,然后通过`copyList`函数复制链表并打印出来。注意最后别忘了删除原始链表以释放内存。
阅读全文