定义单链表类,并链表类作为链表项类的友元类,并链表类实现链表的链接
时间: 2023-07-11 14:50:24 浏览: 50
好的,下面是单链表类的定义:
```c++
template <typename T>
class LinkedList;
template <typename T>
class ListNode {
friend class LinkedList<T>;
public:
ListNode() : next(nullptr) {}
ListNode(const T& d) : data(d), next(nullptr) {}
private:
T data;
ListNode<T>* next;
};
template <typename T>
class LinkedList {
public:
LinkedList() : head(nullptr) {}
void insert(const T& data) {
ListNode<T>* node = new ListNode<T>(data);
if (head == nullptr) {
head = node;
} else {
ListNode<T>* cur = head;
while (cur->next != nullptr) {
cur = cur->next;
}
cur->next = node;
}
}
private:
ListNode<T>* head;
};
```
上述代码中,我们定义了一个链表项类`ListNode`,包含数据`data`和指向下一个链表项的指针`next`,并将链表类`LinkedList`作为友元类,以便链表类可以访问链表项类的私有成员。
链表类`LinkedList`包含一个头指针`head`,表示链表的头部。`insert`方法可以在链表末尾插入一个元素。如果链表为空,则直接将新元素插入头部,否则遍历到链表末尾,将新元素插入到末尾。
下面是链表类的链接实现:
```c++
template <typename T>
void link(LinkedList<T>& list1, LinkedList<T>& list2) {
if (list1.head == nullptr) {
list1.head = list2.head;
} else {
ListNode<T>* cur = list1.head;
while (cur->next != nullptr) {
cur = cur->next;
}
cur->next = list2.head;
}
}
```
上述代码中,我们定义了一个`link`函数,用于将两个链表`list1`和`list2`链接起来。如果`list1`为空,则直接将`list2`链接到`list1`的头部。否则遍历到`list1`的末尾,将`list2`链接到末尾。