c++关于链表的操作
2014-11-15 10:33
232 查看
网上搜到的链表操作大都是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; }
相关文章推荐
- c++关于结构体动态链表初始化添加删除操作代码
- [C++][MFC]关于菜单的一些操作
- c++中关于文件操作资料收集(值得收藏)
- 关于链表的若干操作
- 纯C++写的类似于VC对INI文件的读写操作(关于注释的暂时没有处理)
- C++ 链表操作
- [C++] Visual C++ 6.0 中关于鼠标操作的五个API函数操作技巧
- 关于单链表的各种函数的C++源代码,创建单链表、求表长、插入、删除等等
- 关于c++中 类对象的赋值操作
- C++之链表操作
- 关于C++的模板操作
- C++中关于文件操作的函数
- 关于文件与链表的操作
- 关于链表的简单操作
- c/c++链表操作
- c++中关于文件操作资料收集(外文)
- C++中链表的一些操作
- JAVA与C++::关于JNI中文字符串操作问题总结
- C++链表基本操作
- C语言--链表的常见操作(在DVE-C++编译运行通过)