2016-04-09 4 views
-2

これは私のヘッダファイル演算子のオーバーロードを介して2つの単独リンクリストを連結する方法はありますか?

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

です私はそれを違うはずだ。私は近いと感じているが、おそらく私は論理的な誤りを犯しているのだろうか?

任意およびすべてのヘルプは通常

+0

第二のリストでそれを連結するためにそれを使用することができましたtも定義されています)、参照によってローカルを返します - 間違っています。値で返します。 – LogicStuff

+0

申し訳ありませんが、「tohma + = i」にエラーメッセージが表示されました。私の悪い – CodingPoding

答えて

0

を理解されるであろう次のように、LinkedListためoperator+が構成されている: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; 

} 

、同様のロジックを有する:

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

    Node* temp = _list.head; 

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

    return *this; 

} 

私はかなり遅れているのでここに何か間違っているかもしれないが、それは正確でなければならない。

+0

これは間違いなく助けになります。私はちょうど今私の2つのデータを挿入する作業をする必要があります – CodingPoding

+0

ありがとう、私はあなたとは少し違ったことをやったが、あなたのものは非常に有用だった – CodingPoding

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

    tohma->tail->next = temp; 

    return *tohma; 
} 

私はすでに私の最初のリストについては、保存されたテーリングノードを持っていたので、私はそれは `演算子は+`ではなく、 `+ =`(そのISN」だ

関連する問題