以下是我编写的链表类,有一部分的函数功能我不太清楚该怎么实现,我想知道该怎么实现“链表复制构造函数、链表赋值运算符重载、简单合并在链表尾部、链表反转、有序链表创建(升序)、链表尾部插入节点、删除链表尾部节点、获取链表尾部指针(末节点)、链表节点个数(不含头节点)”,感谢!
#pragma once
#include <iostream>
using namespace std;
class Node
{
public:
Node(int n = 0, Node* p = NULL) { num = n; next = p; }
friend class Linklist;
private:
int num;
Node* next;
};
class Linklist
{
public:
Linklist(int n = 0) { head = new Node(n); }//创建只含头节点的空链表
void insert(int n);//n代表插入节点的位置
void visitAllNode();//遍历
Node* find(int num); //查找num值节点
void deleteNum(int num);//删除值为num的节点
void release();//清空链表,只留下头节点
~Linklist() { release(); delete head; }
Linklist(const Linklist&);//链表复制构造函数
Linklist& operator = (const Linklist&);//链表赋值运算符重载
void operator+=(const Linklist&); //简单合并在链表尾部
void List_Reverse(); //链表反转
void Creat_OrderList(int); //有序链表创建(升序)
void push_back(int); //链表尾部插入节点
void pop_back(); //删除链表尾部节点
Node* back(); //获取链表尾部指针(末节点)
int size(); //链表节点个数(不含头节点)
private:
Node* head;
};
void Linklist::insert(int n)//n代表插入节点的位置
{
Node *p = head, *ptr;
int value;
if (head->num < n)
{
cout << "插入位置有误" << endl;
return;
}
for (int i = 0; i < n; i++)
{
p = p->next;
}
cout << "请输入插入节点的数据:";
cin >> value;
ptr = new Node(value);
ptr->next = p->next;
p->next = ptr;
head->num++;
}
void Linklist::visitAllNode()//遍历
{
Node* p;
p = head->next;
if (p == NULL)
{
cout << "空链表" << endl;
return;
}
cout << "表头--";
while (p != NULL)
{
cout << p->num << "--";
p = p->next;
}
cout << "表尾" << endl;
}
Node* Linklist::find(int num)//查找num值节点
{
Node *p1 = head->next, *p2 = head;
if (p1 == NULL)
{
cout << "空链表";
return NULL;
}
while (p1 != NULL)
{
if (p1->num != num)
{
p2 = p1;
p1 = p1->next;
}
else
return p2;
}
return NULL;
}
void Linklist::deleteNum(int num)//删除值为num的节点
{
Node *p1 = find(num), *p2;
if (p1 != NULL)
{
p2 = p1->next;
p1->next = p2->next;
delete p2;
head->num--;
}
else
cout << "没有被删除的数据" << endl;
}
void Linklist::release()//清空链表,只留下头节点
{
Node *p = head->next;
while (p != NULL)
{
head->next = p->next;
delete p;
p = head->next;
}
}
Linklist::Linklist(const Linklist& l)//链表复制构造函数
{
}
Linklist& Linklist::operator=(const Linklist&)//链表赋值运算符重载
{
}
void Linklist::operator+=(const Linklist&)//简单合并在链表尾部
{
}
void Linklist::List_Reverse()//链表反转
{
}
void Linklist::Creat_OrderList(int)//有序链表创建(升序)
{
}
void Linklist::push_back(int)//链表尾部插入节点
{
}
void Linklist::pop_back()//删除链表尾部节点
{
}
Node* back()//获取链表尾部指针(末节点)
{
}
int Linklist::size()//链表节点个数(不含头节点)
{
}