设计一个c++链表类,它的构造函数能复制另一个链表
时间: 2023-08-04 12:22:15 浏览: 102
好的,下面是一个简单的 C++ 链表类的实现,其中包含了一个构造函数,它能够复制另一个链表:
```c++
#include <iostream>
using namespace std;
class ListNode {
public:
int val;
ListNode* next;
ListNode(int data) {
val = data;
next = NULL;
}
};
class LinkedList {
public:
ListNode* head;
LinkedList() {
head = NULL;
}
LinkedList(const LinkedList& list) {
ListNode* node = list.head;
head = NULL;
ListNode* last = NULL;
while (node != NULL) {
ListNode* new_node = new ListNode(node->val);
if (head == NULL) {
head = new_node;
}
if (last != NULL) {
last->next = new_node;
}
last = new_node;
node = node->next;
}
}
void printList() {
ListNode* node = head;
while (node != NULL) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
void addNode(int data) {
ListNode* new_node = new ListNode(data);
if (head == NULL) {
head = new_node;
} else {
ListNode* node = head;
while (node->next != NULL) {
node = node->next;
}
node->next = new_node;
}
}
};
int main() {
LinkedList list1;
list1.addNode(1);
list1.addNode(2);
list1.addNode(3);
cout << "List1: ";
list1.printList();
LinkedList list2 = list1;
list1.addNode(4);
cout << "List1: ";
list1.printList();
cout << "List2: ";
list2.printList();
return 0;
}
```
在上面的代码中,`ListNode` 是一个节点类,包含了一个值和一个指向下一个节点的指针。`LinkedList` 是一个链表类,包含了一个头节点指针。
在构造函数中,我们首先将 `head` 指针设置为 `NULL`。然后,我们使用 `while` 循环遍历另一个链表,创建新的节点,并将其添加到新链表中。
在 `addNode()` 函数中,我们创建一个新的节点,并将其添加到链表的末尾。
最后,我们在 `main()` 函数中创建了一个新的链表 `list1`,并向其中添加了三个节点。然后,我们使用 `LinkedList list2 = list1;` 创建了一个新的链表 `list2`,它与 `list1` 相同。我们添加了一个新节点到 `list1` 中,然后打印了 `list1` 和 `list2` 的内容,以检查它们是否正确复制了。
阅读全文