使用运算符重载C ++合并两个有序链表

时间:2014-04-24 23:39:15

标签: c++ list pointers merge

我已经尝试了很长一段时间来弄清楚如何为我的节点获取指针以合并两个链接列表。我必须使用以下函数定义(注意,当指针是成员函数的参数时,我已经找到了很多答案,但在我的情况下,我必须使用引用。任何指针:)将不胜感激。 NB我知道我的代码还没有完全开发,但我真的需要指向两个OrderedList对象才能使它工作。即如果我能得到两个指向每个有序链接列表的_head的指针,我想我可以生成代码。

任何有关获得curr和mov的有效参考的帮助都将不胜感激。

OrderedList operator+(OrderedList&second) // merges two OrderedLists
{
    int i=1;
    int j=1;

    Node* prev = NULL;
    Node* curr = this->_head;
    Node* mov = second._head;

    while (curr!=NULL and mov!=NULL)
    {

        if (this->operator [](i)<= second->operator [](j) or mov->next == NULL)
        {
            i++;
        }else{
            prev->next = mov;
            mov = mov->next;
            mov = curr;
        }
    }
    return OrderedList;
}

所以这是一个作业,所以我想学习如何正确地做。我不仅对答案感兴趣,而且主要是理解。我是c ++的新手。所以基本上我们已经给出了一个头文件,并且必须使所有成员和朋友函数都能正常工作。我坚持如何使这个操作员功能工作。所以头文件是:

#ifndef ORDEREDLIST_H_
#define ORDEREDLIST_H_

#include <iostream>
using namespace std;
class Node
{
public:
double item; // data item
Node *next; // pointer to next node
};
class OrderedList
{

// friend operator functions
friend ostream &operator<<(ostream &, const OrderedList &);
friend istream &operator>>(istream &, OrderedList &);

public:
// constructors
OrderedList():_head(NULL),_size(0) {};
OrderedList(const OrderedList &); // copy constructor

// destructor
~OrderedList();
// operator functions
OrderedList operator+(OrderedList&); // merges two OrderedLists
double operator[](int) const; // subscript operator returns rvalue
const OrderedList &operator=(const OrderedList &); // assignment

void insert(double); // inserts an item
bool remove(int); // remove i th item
void pop(); // pop the first item
//void printlist(Node*);

private:
Node *_head;
int _size;
};



#endif /* ORDEREDLIST_H_ */

如果重载运算符是OrderedList的朋友或者它是成员函数,我是否只能获得指针?这就是我所看到的,但我对C ++很新。

0 个答案:

没有答案