C++实现链表的创建、插入、删除
来源:互联网 发布:python可视化窗口编程 编辑:程序博客网 时间:2024/04/30 02:46
#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
class linklist
{
private:
node *head;
public:
linklist();
void create();
void listlength();
void addlast();
void insert();
void delheadnext();
void delposnext();
void display();
~linklist();
};
linklist::linklist()
{
head = new node;
head->next = NULL;
}
void linklist::create()
{
node *p, *q;
p = head;
int temp = 0;
cin>>temp;
while (temp != -1)
{
q = new node;
q->data=temp;
q->next=NULL;
p->next = q;
p = q;
cin>>temp;
}
}
void linklist::listlength()
{
int len = 0;
node *p = head;
while (p->next)
{
len++;
p = p->next;
}
cout<<endl<<"现在链表的长度是:"<<len<<endl;
}
void linklist::addlast()
{
node *p, *q;
int val;
cout<<"输入一个值:"<<'\t';
cin>>val;
cout<<"在最后插入值val:"<<val<<endl;
p = head;
q = new node;
q->data = val;
q->next = NULL;
while (p->next)
{
p = p->next;
}
p->next = q;
}
void linklist::insert()
{
node *p, *q;
int i, val, pos;
i = 0;
cout<<"输入val的值:"<<'\t';
cin>>val;
cout<<"输入pos的值:(pos不能等于尾部值)"<<'\t';
cin>>pos;
cout<<"在"<<pos<<"后插入值:"<<val<<endl;
p = head;
while(pos > 0 && i< pos) {
while (p && i < pos)
{
p = p->next;
++i;
}
q = new node;
q->data = val;
q->next = p->next;
p->next = q;
}
}
void linklist::delheadnext()
{
cout<<"删除头结点之后的后继结点之后:"<<endl;
node *p;
//p=NULL
while(head->next)
{
p=head->next;
head->next= head->next->next;
delete p;
p=NULL;
}
}
void linklist::delposnext()
{
node *p,*q;
int pos,i=0;
cout<<"输入pos的值"<<endl;
cin>>pos;
cout<<"删除"<<pos<<"位的结点"<<endl;
p=head;
while(i<pos-1)
{
p=p->next;
i++;
}
if(p->next->next)
{
q=p->next;
p->next=p->next->next;
delete q;
q=NULL;
}
else
{
q=p->next;
delete q;
q=NULL;
p->next=NULL;
}
}
void linklist::display()
{
node *p=head;
while (p->next)
{
cout<<p->next->data;
p = p->next;
cout<<'\t';
}
listlength();
cout<<endl;
}
linklist::~linklist()
{
node *p;
while (head->next)
{
p = head;
head = head->next;
delete p;
p=NULL;
}
delete head;
head=NULL;
}
int main()
{
linklist list;
cout<<"输入链表:"<<endl;
list.create();
list.display();
list.addlast();
list.display();
list.insert();
list.display();
list.delheadnext();
list.display();
list.delposnext();
list.display();
return 0;
}
using namespace std;
struct node
{
int data;
node *next;
};
class linklist
{
private:
node *head;
public:
linklist();
void create();
void listlength();
void addlast();
void insert();
void delheadnext();
void delposnext();
void display();
~linklist();
};
linklist::linklist()
{
head = new node;
head->next = NULL;
}
void linklist::create()
{
node *p, *q;
p = head;
int temp = 0;
cin>>temp;
while (temp != -1)
{
q = new node;
q->data=temp;
q->next=NULL;
p->next = q;
p = q;
cin>>temp;
}
}
void linklist::listlength()
{
int len = 0;
node *p = head;
while (p->next)
{
len++;
p = p->next;
}
cout<<endl<<"现在链表的长度是:"<<len<<endl;
}
void linklist::addlast()
{
node *p, *q;
int val;
cout<<"输入一个值:"<<'\t';
cin>>val;
cout<<"在最后插入值val:"<<val<<endl;
p = head;
q = new node;
q->data = val;
q->next = NULL;
while (p->next)
{
p = p->next;
}
p->next = q;
}
void linklist::insert()
{
node *p, *q;
int i, val, pos;
i = 0;
cout<<"输入val的值:"<<'\t';
cin>>val;
cout<<"输入pos的值:(pos不能等于尾部值)"<<'\t';
cin>>pos;
cout<<"在"<<pos<<"后插入值:"<<val<<endl;
p = head;
while(pos > 0 && i< pos) {
while (p && i < pos)
{
p = p->next;
++i;
}
q = new node;
q->data = val;
q->next = p->next;
p->next = q;
}
}
void linklist::delheadnext()
{
cout<<"删除头结点之后的后继结点之后:"<<endl;
node *p;
//p=NULL
while(head->next)
{
p=head->next;
head->next= head->next->next;
delete p;
p=NULL;
}
}
void linklist::delposnext()
{
node *p,*q;
int pos,i=0;
cout<<"输入pos的值"<<endl;
cin>>pos;
cout<<"删除"<<pos<<"位的结点"<<endl;
p=head;
while(i<pos-1)
{
p=p->next;
i++;
}
if(p->next->next)
{
q=p->next;
p->next=p->next->next;
delete q;
q=NULL;
}
else
{
q=p->next;
delete q;
q=NULL;
p->next=NULL;
}
}
void linklist::display()
{
node *p=head;
while (p->next)
{
cout<<p->next->data;
p = p->next;
cout<<'\t';
}
listlength();
cout<<endl;
}
linklist::~linklist()
{
node *p;
while (head->next)
{
p = head;
head = head->next;
delete p;
p=NULL;
}
delete head;
head=NULL;
}
int main()
{
linklist list;
cout<<"输入链表:"<<endl;
list.create();
list.display();
list.addlast();
list.display();
list.insert();
list.display();
list.delheadnext();
list.display();
list.delposnext();
list.display();
return 0;
}
0 0
- C语言实现带头结点的链表的创建、查找、插入、删除
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C语言实现链表的创建,初始化,插入,删除,查找
- c语言链表的创建、插入、删除、排序
- C++链表的创建和插入删除的实现
- C++实现链表的创建、插入、删除
- C++实现双向链表的创建,插入,修改,删除
- c++ 实现链表的创建,查询,打印,删除,插入
- C语言实现单链表的创建、插入、删除
- 单链表的实现(C),主要实现链表的创建、获得链表元素、插入、删除、打印
- 用c实现HASH表创建、插入、查找、删除、打印
- 用c实现HASH表创建、插入、查找、删除、打印
- C语言实现链表节点的插入和删除
- C语言实现链表节点的插入和删除
- C语言实现链表的插入、删除、查询操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言实现动态链表的创建、删除、插入、输出(CentOS6.5上调试成功)
- cocos2dx自定义的滑动滚条
- C语言之动态函数的使用
- 项目进度【困难篇】
- thrift的enum:根据value取得name
- 反向进程注入及隐藏--动手做一个最简单的PELoader
- C++实现链表的创建、插入、删除
- acm平方和与立方和
- 几个发人省思的小故事
- 插入排序
- 关于eclipse中的使用小常识(未完待续)
- 接口
- Wireshark 基本使用方法
- ubuntu12.04.4切换GDM和LightDM
- Qt环境配置(一)