来自https://blog.csdn.net/h294455907/article/details/80223345
这篇博客,做了一点小改动,用一个cpp实现的

#include<iostream>
using namespace std; class ListNode {
public :
int data;
ListNode *next;
}; class List {
public:
List();
~List();
void CreateList();
void Insert(int data,int index,bool flag = true);
void Delete(int index);
void printList();
void getData(int index);
int getLength();
private:
ListNode *head;
}; List::List() {
head = new ListNode();
head->next = NULL;
cout<<"创建对象成功"<<endl;
} List::~List() {
ListNode *p = head, *s;
while (p->next != NULL) {
s = p->next;
p = s->next;
delete s;
}
delete p;
delete head;
} int List::getLength() {
int len = 0;
ListNode *p = head;
while(p->next != NULL) {
len++;
p = p->next;
}
return len;
} void List::CreateList() {
int num,data;
cout<<"请输入数据个数";
cin>>num;
cout<<endl;
cout<<"请输入数据";
cout<<endl;
for(int i = 0;i<num;i++) {
cin>>data;
Insert(data,getLength()+2,false);
}
cout<<"List 创建完成"<<endl;
} void List::Insert(int data,int index,bool flag) {
ListNode *p = head, *s;
if(index<=0) {
cout<<"数据长度必须大于0";
return ;
}
if(getLength()+1<index) {
while (p->next != NULL)
{
p = p->next;
}
s = (ListNode*)new ListNode[1];
s->data = data;
s->next = NULL;
p->next = s;
if(flag!=false) {
cout<<"链表长度为"<<getLength()-1<<",无法插入到第"<<index<<"个位置";
cout<<"现将数据"<<data<<"插入到表尾部"<<endl;
}
}
else {
for(int i =0;i<index-1;i++) {
p = p->next;
}
s = (ListNode*)new ListNode[1];
s->data = data;
s->next = p->next;
p->next = s;
cout<<"数据"<<data<<"插入第"<<index<<"个位置成功!"<<endl;
}
} void List::Delete(int index) {
ListNode *p = head, *s;
int i =0;
if(index<=0||index>getLength()) {
cout<<"元素不在表中"<<endl;
return ;
}
while(i<index-1)
{
i++;
p = p->next;
}
s= p->next;
p->next = s->next;
cout<<"第"<<index<<"个元素删除成功!"<<endl;
delete s;
} void List::printList() {
ListNode *p = head;
cout<<"printList:"<<endl;
if(p->next==NULL) {
cout<<"空链表"<<endl;
return ;
}
p= p->next;
while(p!= NULL) {
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
} void List::getData(int index) {
ListNode *p = head;
if(index<=0||index>getLength()) {
cout<<"元素不在表中"<<endl;
return ;
}
for(int i = 0;i<index;i++) {
p = p->next;
}
cout<<"第"<<index<<"个元素为"<<p->data<<endl;
} int main() {
List list;
list.CreateList();
list.printList();
list.Insert(10,2);
list.Insert(20,10);
list.printList();
list.Delete(5);
list.printList();
list.getData(4);
cout<<"目前链表长度为"<<list.getLength()<<endl;
return 0;
}

 
 
 
 
 

最新文章

  1. Python的高级特性4:函数式编程
  2. zhuang 定制iOS 7中的导航栏和状态栏
  3. SVN上传代码
  4. C# DataTable转List And List转DataTable
  5. tcpreplay安装使用经验
  6. WordPress 开放重定向漏洞
  7. Eclipse用法和技巧九:自动添加try/catch块2
  8. Little Sympathy for Bear Stearns : NPR
  9. 如何用好消息推送(JPush)为app拉新、留存、促活
  10. 前端模块化——seaJS
  11. webpack的简单配置
  12. getSystemService详解
  13. Spring 事务与脏读、不可重复读、幻读
  14. 逐帧动画抖动、适配布局、SVG Sprites
  15. 【经验总结】- IDEA无法显示Project目录怎么办
  16. TCP/IP通信协议
  17. cocos2dx spine之二 :spine变色
  18. [代码审计]云ec电商系统代码审计
  19. Linux驱动之USB(个人)
  20. R基础学习(一)-- 连接mysql数据库

热门文章

  1. Linux配置文件和网络常用命令总结
  2. FSL--fsleyes建立软连接方法
  3. windows系统mysql8.0.20.0踩坑(-)
  4. 【三维重建】Ubuntu20.04进行RealSenseD435环境配置及初步使用
  5. 连接HBase
  6. (0514)python学习-思维导图
  7. ts的接口和泛型的基本语法
  8. Java基础__06.注解和反射
  9. docker compose设置不同容器间通信
  10. 攻防世界-Web_php_include(data协议)