来自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;
}

 
 
 
 
 

c++实现单链表及常用方法实现的更多相关文章

  1. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

  2. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  3. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  4. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  5. [LeetCode] Linked List Cycle II 单链表中的环之二

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  6. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  7. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  8. 分离的思想结合单链表实现级联组件:CascadeView

    本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...

  9. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  10. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

随机推荐

  1. 前端之Vue day08 Vue3项目搭建、setup、toRefs

    一.Vue3 介绍 # 新项目使用vue3,有部分老项目使用vue2 # vue3 的变化 1.性能的提升 -打包大小减少41% -初次渲染快55%, 更新渲染快133% -内存减少54% 2.源码的 ...

  2. 08.JSP技术

    一.什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据.JSP文件的扩展名是.jsp. JSP = htm ...

  3. python3.7安装Anaconda3+tensorflow2.1中遇到的问题

    最近想搞深度学习,就开始装tensorflow,其中也是遇到了一些问题,希望给遇到同类问题的童鞋一些提示.... 因为之前一直用的python3.7,虽然网上很多建议装python3.5版本tenso ...

  4. vscode 终端中运行执行js文件

    问题汇总 1.在vscode中执行node -v没有反应或者执行js文件出现下图错误 解决办法: 1.先关闭vscode,找到vscode的执行文件,在兼容性中勾上以管理员身份运行此程序,该问题win ...

  5. Java学习笔记-11

    StringBuffer:是字符串缓冲区,是一个容器.长度是固定的,可以直接添加多个数据类型.最终回通过toString方法变成字符串. 容器具备的特点:存储,删除,获取,修改 存储操作: Strin ...

  6. python存储xml格式数据

    例子 import xml.dom.minidom # 在内存中创建一个空的文档 doc = xml.dom.minidom.Document() # 创建一个根节点Managers对象 root = ...

  7. 虚拟机中Linux分区扩容

    打开Virtualbox所在的安装目录,执行以下命令,命令中的虚拟有磁盘路径改成自己的: 调整容量前,先关闭虚拟机.接着,打开CMD,进入VirtualBox的安装目录,执行VBoxManage li ...

  8. 解决: 无法打开明确指定的数据库“SSISDB”, 用户 'NT Service\SSISScaleOutMaster150' 登录失败.

    环境: WindowsServer2019Datacenter  SQL Server2019  SSMSv18 事情: SQL安装完成后, 发现系统日志中有如下报错:   解决: 无法打开明确指定的 ...

  9. Kubernetes学习笔记(二)

    [查看pod里container的logs] kubectl logs nginx --all-containers=true                  #Return snapshot lo ...

  10. Vulnhub 靶场 DIGITALWORLD.LOCAL: SNAKEOIL

    Vulnhub 靶场 DIGITALWORLD.LOCAL: SNAKEOIL 前期准备 靶机地址:https://www.vulnhub.com/entry/digitalworldlocal-sn ...