c++关于链表的操作

来源:互联网 发布:概率矩阵分解算法 编辑:程序博客网 时间:2024/05/17 06:40

网上搜到的链表操作大都是c的,由于最近要准备一个c++的面试,遂写了一些c++链表的基本操作,不多说直接上代码。

#include <iostream>using namespace std;class MyNode{public:MyNode();                                         //默认构造函数MyNode *Create();                                 //创建链表void CoutAll(MyNode *Head);                       //遍历输出链表void SetValue(int value);                         //设置成员变量m_Value的值int GetLength(MyNode *Head);                      //得到链表长度void DeleteNode(MyNode **Head,int n);             //删除链表中第n个元素void DeleteNode2(MyNode **Head,int n);            //删除链表中值为n的元素void InsertNode(MyNode **Head,MyNode *value,int n);             //向链表中插入节点void AddToTail(MyNode *Head,MyNode *value);                     //链表末尾添加节点private:int m_Value;MyNode *pNext;};//默认构造函数MyNode::MyNode(){m_Value=0;pNext=NULL;}//创建链表MyNode *MyNode::Create(){int value;MyNode *pHead=NULL;MyNode *pTail=NULL;while(1){cout<<"please input node"<<endl;cin>>value;if(value==-1){break;}MyNode *node=new MyNode();node->m_Value=value;if(pHead!=NULL&&pTail!=NULL){pTail->pNext=node;pTail=node;}else{pHead=pTail=node;}}return pHead;}//设置成员变量m_Value的值void MyNode::SetValue(int value){m_Value=value;}//遍历输出链表void MyNode::CoutAll(MyNode *Head){MyNode *index=Head;if(index==NULL){cout<<"链表中没有数据"<<endl;}while(index!=NULL){cout<<index->m_Value<<endl;index=index->pNext;}}//得到链表长度int MyNode::GetLength(MyNode *Head){MyNode *index=Head;int length=0;while(index!=NULL){++length;index=index->pNext;}return length;}//删除链表中第n个元素void MyNode::DeleteNode(MyNode **Head,int n){MyNode *Temp=NULL;int length=GetLength(*Head);if(n>length||n<1){cout<<"n值范围错误"<<endl;}int count=0;if(n==1){Temp=*Head;*Head=(*Head)->pNext;delete Temp;Temp=NULL;}MyNode *index=*Head;if(n>1&&n<=length){while(index!=NULL){++count;if(count==(n-1)){Temp=index->pNext;index->pNext=index->pNext->pNext;delete Temp;Temp=NULL;}index=index->pNext;}}}//删除链表中值为n的元素void MyNode::DeleteNode2(MyNode **Head,int n){MyNode *Temp=NULL;while((*Head)!=NULL&&(*Head)->m_Value==n){Temp=*Head;*Head=(*Head)->pNext;delete Temp;Temp=NULL;}MyNode *index=*Head;while(index!=NULL){if(index->pNext==NULL){break;}else if(index->pNext->m_Value==n){Temp=index->pNext;index->pNext=index->pNext->pNext;delete Temp;Temp=NULL;}else{index=index->pNext;}}}//向链表中插入节点void MyNode::InsertNode(MyNode **Head,MyNode *value,int n){int length=GetLength(*Head);int count=0;MyNode *index=*Head;if(n<1||n>length){cout<<"n取值范围错误"<<endl;}if(n==1){value->pNext=(*Head);(*Head)=value;}if(n>1&&n<=length){while(index!=NULL){++count;if(count==(n-1)){value->pNext=index->pNext;index->pNext=value;break;}index=index->pNext;}}}void MyNode::AddToTail(MyNode *Head,MyNode *value){MyNode *index=Head;while(index->pNext!=NULL){index=index->pNext;}index->pNext=value;}int main(){MyNode *Head=new MyNode();Head=Head->Create();Head->CoutAll(Head);//Head->DeleteNode(&Head,9);MyNode *node=new MyNode();node->SetValue(20);//Head->InsertNode(&Head,node,9);Head->AddToTail(Head,node);Head->CoutAll(Head);return 0;}


0 0