如何通过运算符重载连接两个单向链表?

How to concatenate two singly linked lists via operator overloading?

这是我的头文件

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

#include <iostream>
#include <string>
using namespace std;

class Node
{
    friend class LinkedList;

public:
    Node(string& name, int num) :studentName(name), RUID(num)
    {
        this->next = NULL;
    }

private:
    string studentName;
    int RUID;
    Node *next;
};

class LinkedList
{
public:
    LinkedList();
    ~LinkedList();

    LinkedList& operator+(LinkedList &i);
    //LinkedList operator=();

    void makeLists(int n);
    void addNode(LinkedList &i);
    void removeNode();
    void printList();
    void printElement();
    void sortList();

private:
    Node *head;
    Node *tail;
    int size;
};

#endif

...这是我的运算符+函数

LinkedList& LinkedList::operator+(LinkedList &i)
{
    LinkedList tohma;
    tohma = *this;
    tohma += i;
    return tohma;
}

我收到了 += 运算符的错误消息,但我不知道应该如何以不同的方式来处理它。我觉得我很接近,但也许我犯了一个逻辑错误?

我们将不胜感激

通常,LinkedListoperator+ 结构如下:

LinkedList operator+(const LinkedList& _list) {

    // ptr to list to return, initialised with this
    LinkedList* ret_list = this;

    // temporary node ptr for iterating through _list
    Node* temp = _list.head;

    // loop through contents of _list
    while (temp != nullptr) {
        // insert data from _list to ret_list
        ret_list->insert(temp->data);  
        // ^= this will need to be changed for your specific list fields and insert methods
        temp = temp->next;
    }

    return &ret_list;

}

至于operator+=,逻辑类似:

LinkedList& operator+=(const LinkedList& _list) {

    Node* temp = _list.head;

    while (temp != nullptr) {
        insert(temp->data);
        temp = temp->next;
    }        

    return *this;

}

我这里可能有点不对,因为已经很晚了,但应该是准确的。

LinkedList LinkedList::operator+(const LinkedList &i)
{
    LinkedList* tohma = this;
    Node* temp = i.head;

    tohma->tail->next = temp;

    return *tohma;
}

因为我已经为我的第一个列表保存了尾部节点,所以我能够使用它来将它与第二个列表连接起来