用类模板完成如何实现两个单链表sLinkList对加法运算符的重载,使两个链表拼接起来,请创建一个新的对象并返回这个对象
时间: 2024-10-14 07:07:31 浏览: 30
在C++中,我们可以使用类模板来实现`sLinkList`类的加法运算符重载,使得任意类型的单链表能够相加。首先,我们需要在头文件`SeqList.h`中声明这样的操作:
```cpp
template <typename T>
class sLinkList {
public:
// ...其他成员变量和方法
// 为加法运算符重载提供声明
friend sLinkList<T>& operator+(const sLinkList<T>& first, const sLinkList<T>& second);
};
// 然后在对应的实现文件`SeqList.cpp`中定义该方法
template <typename T>
sLinkList<T>& sLinkList<T>::operator+(const sLinkList<T>& second) {
if (this == nullptr) { // 如果第一个链表为空
return second; // 返回第二个链表
}
else if (second.head == nullptr) { // 如果第二个链表为空
return *this; // 返回第一个链表
}
// 创建一个新链表来保存结果
auto result = *this; // 将当前链表赋值给result
// 遍历第二个链表,并添加其节点到result链表的末尾
auto current = second.head;
while (current != nullptr) {
result.tail->next = current;
result.tail = current;
current = current->next;
}
return result;
}
```
上述代码首先检查两个链表是否都为空,如果其中一个为空则直接返回另一个。接着,它创建一个新的临时链表`result`(在这里实际上是原链表的一个别名),然后遍历第二个链表,依次将每个节点连接到`result`的尾部。
最后,在`main.cpp`等地方你可以像这样使用这个加法运算符:
```cpp
sLinkList<int> list1 = ...; // 初始化第一个链表
sLinkList<int> list2 = ...; // 初始化第二个链表
sLinkList<int> combinedList = list1 + list2; // 拼接两个链表
```
阅读全文