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



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

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){
         ^

成员操作符总是将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;
}

或者你可以使用你的原始函数作为一个自由函数,但是你不能使用私有成员,除非你将它声明为友元。

相关内容

  • 没有找到相关文章

最新更新