#include <iostream>
using std::cin;
using std::cout;
using std::endl;
class LinkList
{
public:
LinkList(); //构造函数
~LinkList(); //析构函数
LinkList *CreateLinkList(size_t); //创建单链表
void InsertNum(LinkList *); //插入数据
void DelNum(LinkList *); //删除数据
void SearchNum(LinkList *); //查找数据
void print(LinkList *); //打印链表中的数据
private:
int num;
LinkList* pNext;
};
//初始化类对象
inline LinkList::LinkList()
{
num = 0;
pNext = NULL;
}
//析构函数
inline LinkList::~LinkList()
{
}
// 创建带头节点的链表
LinkList* LinkList::CreateLinkList(size_t times)
{
LinkList *tHead,*tmp,*temp;
tHead = new LinkList();
tmp = new LinkList();
if (NULL == tHead || NULL == tmp) {
return NULL;
}
temp = tHead;
tHead->num = times; //记录链表长度
for (size_t i = 1; i <= times; ++i) {
int num;
cin >> num;
tmp->num = num; //存储链表长度
temp->pNext = tmp;
temp = tmp;
tmp = new LinkList();
}
return tHead;
}
//添加数据模块
void LinkList::InsertNum(LinkList *head)
{
cout << "输入数据插入位置:" << endl;
int position,i = 1;
cin >> position;
for (LinkList *tmp = head; NULL != tmp; tmp = tmp->pNext,++i) {
if (position < 1 || position > head->num) {
cout << "插入位置不合适." << endl;
break;
} else if (i == position) { /*插入数据,若改成(i == postion + 1),结果为后插入数据*/
LinkList *p,*t = new LinkList();
p = tmp->pNext;
cout << "输入要插入的数据:\n";
cin >> t->num;
tmp->pNext = t;
t->pNext = p;
head->num = head->num + 1;
return ;
}
}
}
//删除链表中数据
void LinkList::DelNum(LinkList *head)
{
cout << "输入删除的数据:" << endl;
int number;
bool flag = false;
cin >> number;
LinkList *q,*tmp = NULL;
for (tmp = head->pNext; NULL != tmp; tmp = tmp->pNext) {
if (tmp->num == number) {
LinkList *p = tmp->pNext;
q->pNext = p;
delete tmp;
tmp = NULL;
head->num--;
flag = true;
break;
}
q = tmp;
}
if (true == flag) {
cout << "删除成功." << endl;
} else {
cout << "删除不成功." << endl;
}
}
//查找模块
void LinkList::SearchNum(LinkList *head)
{
cout << "输入查找的数:" << endl;
int num;
cin >> num;
LinkList *tmp;
for (tmp = head->pNext; NULL != tmp; tmp = tmp->pNext) {
if (tmp->num == num) {
cout << "查找该数字:" << tmp->num << endl;
break;
}
}
if (NULL == tmp)
cout << "未查找到该数字." << endl;
return ;
}
//打印链表数据
void LinkList::print(LinkList *tmp)
{
if(NULL == tmp) {
cout << "The LinkList is empty!" << endl;
return ; // 为空不进行输出
}
cout << "链表长度为:" << tmp->num << endl;
for(LinkList *t = tmp->pNext; NULL != t; t = t->pNext) {
cout << t->num << ' ';
}
cout << endl;
return ;
}
int main()
{
LinkList *head = NULL;
cout << "输入创建节点数:" << endl;
size_t times;
cin >> times;
head = head->CreateLinkList(times);
head->print(head);
head->InsertNum(head);
head->print(head);
head->DelNum(head);
head->print(head);
head->SearchNum(head);
delete head; /*销毁链表*/
head = NULL; /*防止悬垂指针*/
return 0;
}
程序运行结果: