通过引用比较链表中的节点

时间:2015-09-16 03:46:13

标签: c++ linked-list

我试图通过引用而不是值来比较两个单独链接列表中的节点。 我对链表的实现如下

struct node{
    node(char data):data(data), next(nullptr){}
    char data;
    node* next;
};

class slist{
    node* head;
public:
    slist(node* head):head(head){}

    node*& getHead(){
        return head;
    }
    void insert(char item){
        node* p = new node(item);
        if(head == nullptr){
            head = p;
            return;
        }
        p->next = head;
        head = p;

    }

这是我用来通过引用比较两个节点的重载运算符。

bool operator==(node*& p, node*& q){
    if(p->data == q->data) return true;
    return false;
}
    static node* compare(node*& p, node*& q){
        if(p == nullptr || q == nullptr) return nullptr;
        node* current1 = p;
        node* current2 = q;

        while(current1 != nullptr){
            while(current2 != nullptr){
                if(current1 == current2) return current1;
                current2 = current2->next;
            }
            current1 = current1->next;
        }
        return nullptr;

    }
};

驱动程序代码如下:

 bool operator==(node*& p, node*& q){
        if(p->data == q->data) return true;
        return false;
    }

static node* intersection(node*& p, node*& q){
    if(p == nullptr || q == nullptr) return nullptr;
    node* current1 = p;
    node* current2 = q;

    while(current1 != nullptr){
        while(current2 != nullptr){
            if(current1 == current2) return current1;
            current2 = current2->next;
        }
        current1 = current1->next;
    }
    return nullptr;

}

我一直得到的错误如下:

error: overloaded 'operator==' must be a binary operator (has 3 parameters)
    bool operator==(node*& p, node*& q){
         ^

1 个答案:

答案 0 :(得分:0)

成员运算符总是将this指针作为隐含参数,因此您只需要另一个对象。

bool operator==(node*& q){
    if(this->data == q->data) return true; //Could also just have if(data == q->data) but this is a little more explicit
    return false;
}

或者您可以将原件用作免费功能,但除非您将其声明为朋友,否则您将无法使用私人会员。