问题遇到的现象和发生背景
C++单链表连接。设有两条有序链表(即 data 域元素的关键字由前往后不断增大),试设计算法,将这两条链表合并为一条新的有序链表,原链表不变。两条链表中 data 域关键字相同的元素只选取一个存储到新的有序链表中,不同的元素都存储到新的有序链表中。
问题相关代码,请勿粘贴截图
#include <iostream>
#include <string>
using namespace std;
template<class T>
struct Node //带头节点的单链表
{
T data;
struct Node<T>* next;
};
template<class T>
class linkList
{
friend void merge(linkList<T>& a, linkList<T>& b);
friend bool operator==(linkList<T>& a, linkList<T>& b);
private:
Node<T>* front; //定义头指针
public:
linkList() //无参构造函数定义空链表
{
front = new Node<T>; front->next = NULL;
};
linkList(T a[], int n); //有参构造函数,用n个数据初始化链表
~linkList(); //析构函数,销毁链表
Node<T>* get(int i); //获取链表第i个元素地址
T Delete(int i); //删除链表第i个元素,并返回该元素值
};
template<class T>
linkList<T>::linkList(T a[], int n) //头插法
{
front = new Node<T>; //建立头结点
front->next = NULL; //建立空链表
for (int i = n - 1; i >= 0; i--)
{
Node<T>* p = new Node<T>;
p->data = a[i];
p->next = front->next;
front->next = p;
}
}
template<class T>
linkList<T>::~linkList() //销毁链表
{
Node<T>* p = front; //初始化工作指针
while (p != NULL)
{
front = p;
p = p->next;
delete front;
}
}
template<class T>
Node<T>* linkList<T>::get(int i)
{
Node<T>* p = front->next; //初始化工作指针
int j = 1;
while (p && j != i)
{
p = p->next;
j++;
}
return p;
}
template<class T>
T linkList<T>::Delete(int i)
{
Node<T>* p = front; //初始化工作指针
if (i != 1)p = get(i - 1);
Node<T>* s = p->next;
p->next = s->next;
delete s;
}
template<class T>
void merge(linkList<T> &a, linkList<T>& b) //合并链表函数
{
//请问该函数怎么写
}
template<class T>
bool operator==(linkList<T>& a, linkList<T>& b) //重载运算符
{
//请问该函数怎么写
}
int main()
{
system("pause");
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我的想法是写一个运算符重载的函数来判断a,b链表是否有相同元素。再写一个合并链表的函数,删掉b链表中与a链表相同的元素,并把b接在a链表后面
我想要达到的结果
求这两个函数怎么写