Сложение и вычитание элементов двух списков
Есть код:
#include <iostream>
template<typename T> class Node {
public:
Node *pNext;
T data;
Node(T data = T(), Node *pNext = nullptr) {
this->data = data;
this->pNext = pNext;
}
};
template<typename T> class List {
public:
List();
~List();
void push_back(T data);
int GetSize() {return Size;}
T& operator[](const int index);
void pop_front();
void clear();
void sum(int first,int second);
private:
int Size;
Node<T> *head;
};
template<typename T>
List<T>::List() {
Size = 0;
head = nullptr;
}
template<typename T> //деструктор
List<T>::~List() {
clear();
}
template<typename T>
void List<T>::push_back(T data) { // добавление
if (head == nullptr) {
head = new Node<T>(data);
}else{
Node<T> *current = this->head;
while (current->pNext != nullptr) {
current = current->pNext;
}
current->pNext = new Node<T>(data);
}
Size++;
}
template<typename T>
void List<T>::pop_front() { // удаление
Node<T> *temp = head;
head = head->pNext;
delete temp;
Size--;
}
template<typename T>
void List<T>::clear() {
while (Size) {
pop_front();
}
}
template<typename T>
T & List<T>::operator[](const int index) { // перегрузка
int counter = 0;
Node<T> *current = this->head;
while(current!=nullptr) {
if (counter == index) {
return current->data;
}
current = current->pNext;
counter++;
}
}
template<typename T>
void List<T>::sum(int first, int second) {
int result = 0;
result = first+second;
std::cout<<result<<std::endl;
}
int main() {
List<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
List<int> list;
list.push_back(5);
lst.push_back(1);
lst.push_back(7);
for (int i = 0;i < lst.GetSize();i++) {
lst[i],list[i]);
}
return 0;
}
Так вот, нужна помощь в реализации сложения и вычитания элементов двух списков. Если кто напишет ещё и дружественную функцию какую-нибудь, буду очень благодарен.