#include <iostream>
using namespace std;
class Node
{
private:
Node *Pre;
Node *Next;
int Num;
public:
Node(int Num);
void setNextNode(Node *node);
void setPreNode(Node *node);
Node *getNextNode();
Node *getPreNode();
int getNum();
};
Node::Node(int Num)
{
this->Num=Num;
this->Pre=NULL;
this->Next=NULL;
}
void Node::setNextNode(Node *node)
{
this->Next=node;
}
void Node::setPreNode(Node *node)
{
this->Pre=node;
}
Node *Node::getNextNode()
{
return this->Next;
}
Node *Node::getPreNode()
{
return this->Pre;
}
int Node::getNum()
{
return this->Num;
}
class ArrayNode
{
public:
Node *First;
void InsertFirstNode(int Num);
void DelFirstNode();
void InsertPosNode(int pos,int Num);
void DelNumNode(int Num);
void InsertEndNode(int Num);
void DelEndNode();
Node *FindNode(int Num);
void DisplayNode();
};
void ArrayNode::InsertFirstNode(int Num)
{
Node *node=new Node(Num);
node->setPreNode(NULL);
node->setNextNode(NULL);
if(First==NULL)
{
First=node;
return;
}
First->setPreNode(node);
node->setNextNode(First);
First=node;
}
void ArrayNode::DelFirstNode()
{
Node *temp=First;
First=First->getNextNode();
First->setPreNode(NULL);
delete temp;
}
void ArrayNode::InsertPosNode(int pos,int Num)
{
Node *node=First;
for(int i=0;i<pos;i++)
{
if(node==NULL)
break;
else
node=node->getNextNode();
}
Node *newNode=new Node(Num);
newNode->setNextNode(node->getNextNode());
newNode->setPreNode(node->getPreNode());
node->getNextNode()->setPreNode(newNode);
node->setNextNode(newNode);
}
void ArrayNode::DelNumNode(int Num)
{
bool isYes=false;
Node *node=First;
while(node!=NULL)
{
if(node->getNum()!=Num)
node=node->getNextNode();
else
{
if(node!=First)
node->getNextNode()->setPreNode(node->getPreNode());
if(node->getNextNode()!=NULL)
node->getPreNode()->setNextNode(node->getNextNode());
delete node;
break;
}
}
if(isYes)
cout<<"未找到节点"<<endl;
}
void ArrayNode::InsertEndNode(int Num)
{
Node *node=First;
while(node->getNextNode()!=NULL)
{
node=node->getNextNode();
}
Node *newNode=new Node(Num);
newNode->setPreNode(node);
node->setNextNode(newNode);
}
void ArrayNode::DelEndNode()
{
Node *node=First;
while(node->getNextNode()!=NULL)
{
node=node->getNextNode();
}
node->getPreNode()->setNextNode(NULL);
delete node;
}
Node *ArrayNode::FindNode(int Num)
{
Node *node=First;
while(node!=NULL)
{
if(node->getNum()!=Num)
node=node->getNextNode();
else
return node;
}
return NULL;
}
void ArrayNode::DisplayNode()
{
Node *node=First;
while(node!=NULL)
{
cout<<node->getNum()<<',';
node=node->getNextNode();
}
}
int main()
{
ArrayNode *arr=new ArrayNode();
for(int i=0;i<10;i++)
{
arr->InsertFirstNode(i);
}
arr->DisplayNode();
arr->DelFirstNode();
puts("");
arr->DisplayNode();
puts("");
arr->DelNumNode(5);
puts("");
arr->DisplayNode();
puts("");
cout<<arr->FindNode(4)<<endl;
arr->InsertEndNode(10);
arr->DisplayNode();
puts("");
arr->DelEndNode();
arr->DisplayNode();
puts("");
delete arr;
system("pause");
}