如何通过运算符重载连接两个单向链表?
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;
}
我收到了 += 运算符的错误消息,但我不知道应该如何以不同的方式来处理它。我觉得我很接近,但也许我犯了一个逻辑错误?
我们将不胜感激
通常,LinkedList
的 operator+
结构如下:
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;
}
因为我已经为我的第一个列表保存了尾部节点,所以我能够使用它来将它与第二个列表连接起来
这是我的头文件
#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;
}
我收到了 += 运算符的错误消息,但我不知道应该如何以不同的方式来处理它。我觉得我很接近,但也许我犯了一个逻辑错误?
我们将不胜感激
通常,LinkedList
的 operator+
结构如下:
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;
}
因为我已经为我的第一个列表保存了尾部节点,所以我能够使用它来将它与第二个列表连接起来