C++ 加强链表


#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");
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值