#include<iostream>
#include<string>
using namespace std;
struct Data
{
const int key;
string data;
Data(int key, string name) :key(key), data(name) {}
};
class Node
{
public:
Node(int key, string data) :nodeData(key, data)
{
next = nullptr;
}
Node(Data data) :nodeData(data), next(nullptr) {}
Node(int key, string data, Node* next) :nodeData(key, data)
{
this->next = next;
}
Data getNodedata()
{
return nodeData;
}
Node*& getNext()
{
return next;
}
protected:
Data nodeData;
Node* next;
};
class List
{
public:
List()
{
headNode = nullptr;
size = 0;
}
void insertByHead(int key, string data)
{
headNode = new Node(key, data, headNode);
size++;
}
void insertByTail(int key, string data)
{
if(size==0)
headNode = new Node(key, data, headNode);
else
{
Node* pmove = headNode;
while (pmove->getNext() != nullptr)
{
pmove = pmove->getNext();
}
Node* newNode = new Node(key, data);
pmove->getNext() = newNode;
}
size++;
}
void insertByAppoin(Data xdata, int posKey)
{
Node* upNode = headNode->getNext();
Node* downNode = headNode;
while (upNode != nullptr && upNode->getNodedata().key != posKey)
{
downNode = upNode->getNext();
upNode = downNode->getNext();
}
if (upNode != nullptr)
{
Node* newNode = new Node(xdata);
downNode->getNext() = newNode;
newNode->getNext() = upNode;
size++;
}
else
{
cout << "插入失败,节点不存在!" << endl;
}
}
void headdelete(List* list)
{
Node* newNode = headNode->getNext();
if (newNode!= nullptr)
{
cout << endl;
cout << "头节点删除" << endl;
headNode->getNext() = newNode->getNext();
delete(newNode);
newNode = nullptr;
size--;
}
else
{
cout << "节点不存在,无法删除!" << endl;
}
}
void weidelete(List* list)
{
Node* updelete = headNode;
Node* downdelete = nullptr;
while (updelete->getNext() != nullptr)
{
downdelete = updelete;
updelete = downdelete->getNext();
}
if (updelete != nullptr)
{
cout << endl;
cout << "尾节点删除" << endl;
downdelete->getNext() = nullptr;
delete(updelete);
updelete = nullptr;
}
else
{
cout << "节点没有找到,无法删除" << endl;
}
}
void autodelete(List* list, int posdata)
{
Node* updelete = headNode->getNext();
Node* downdelete = headNode;
while (updelete != nullptr && updelete->getNodedata().key != posdata)
{
downdelete = updelete;
updelete = downdelete->getNext();
}
if (updelete!=nullptr)
{
cout << endl;
cout << "指定位置删除" << endl;
downdelete->getNext()=updelete->getNext() ;
delete(updelete);
updelete = nullptr;
}
else
{
cout << "指定的节点不存在,无法删除节点!" << endl;
}
}
void printList()
{
Node* pmove = headNode;
while (pmove != NULL)
{
cout << pmove->getNodedata().key <<"\t"<<pmove->getNodedata().data<<"\t";
pmove=pmove->getNext();
}
cout << endl;
}
protected://在这里增加要实现功能的模块
Node* headNode;
int size = 0;
};
int main()
{
List* plist = new List;
Data info = { 1,"小翠" };
plist->insertByHead(info.key, info.data);
Data Iloveyou = { 520,"我爱你" };
plist->insertByHead(Iloveyou.key, Iloveyou.data);
plist->printList();
Data xiaokang = { 2,"小康" };
plist->insertByTail(xiaokang.key, xiaokang.data);
plist->printList();
Data moying = { 3,"初七" };
plist->insertByAppoin(moying, 1);
plist->printList();
plist->headdelete(plist);
plist->printList();
plist->weidelete(plist);
plist->printList();
plist->autodelete(plist, 1);
plist->printList();
return 0;
}
}
|