如何通过运算符重载连接两个单独链接的列表

How to concatenate two singly linked lists via operator overloading?

本文关键字:两个 单独 链接 列表 运算符 何通过 重载 连接      更新时间:2023-10-16

这是我的头文件

#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;
}

由于我已经为第一个列表保存了拖尾节点,所以我可以使用它将其与第二个列表

连接起来