C++实现简单的单链表

浪人 等级 616 0 0
标签: 单链表C/C++

下面实现的是一个简单的单链表

功能不多,学习使用

#pragma once
#include <iostream>
using namespace std;



class ListEx
{
private:
    struct Node
    {
        Node* next;
        int data;
        Node(const Node& node): data(node.data), next(nullptr) {}
        Node(const T& d): data(d), next(nullptr) {}
    };

private:
    Node* head;
    int n; //索引

public:
    ListEx(): head(nullptr), n(0) {}
    Node* getp(int pos)
    {
        if (pos < 0 || pos > n)
        {
            return nullptr;
        }

        if (pos == 0)
        {
            return head;
        }

        Node* p = head;

        for (int i = 1; i < pos; i++)
        {
            p = p->next;
        }

        return p->next;
    }

    void travel()
    {
        Node* p = head;

        if (p == nullptr)
        {
            return;
        }

        p = p->next;

        while (p)
        {
            cout << p->data << "\t" << endl;
            p = p->next;
        }
    }

    void insert(int d, int pos = -1)
    {
        if (head == nullptr)
        {
            head = new Node(0);
            Node* p = new Node(d);
            head->next = p;
            p->next = nullptr;
        }
        //添加到最后
        else if (pos < 0 || pos > n)
        {
            Node* p = getp(n);
            Node* node = new Node(d);
            p->next = node;
            node = nullptr;
        }
        //添加到pos位置
        else
        {
            Node* node = new Node(d);

            Node* p = getp(n - 1);
            Node* q = p->next;
            p->next = node;
            node->next = q;
        }

        ++n;
    }


    //从pos开始查找data 为d的元素,默认从0开始
    int find(int d, int pos = 0)
    {
        Node* p = getp(pos);

        if (p == nullptr)
        {
            return -1;
        }

        while (p)
        {
            if (p->data == d)
            {
                return pos;
            }

            pos++;
            p = p->next;
        }

        return -1;
    }


    //从pos开始删除data为d的元素
    bool erase(int d, int pos = 0)
    {
        int nIndex = find(d, pos);

        if (nIndex == -1)
        {
            return false;
        }

        Node* p = getp(nIndex - 1);
        Node* q = getp(nIndex);

        if (p == nullptr)
        {
            return false;
        }

        p->next = q->next;
        delete q;
        return true;
    }

};
收藏
评论区

相关推荐

C++实现简单的单链表
下面实现的是一个简单的单链表 功能不多,学习使用 pragma once include <iostream using namespace std; class ListEx { private: struct Node { Node next; int data; Node
c++11 实现单例模式
C11出来后,里面新增加了好多好用的功能 下面的单例就是使用了C11中的标准库中的mutex和unique_prt 进行内存管理的. 此单例模式不用担心内存的释放问题 pragma once include <memory include <mutex template <class T class Singleton { public: ty
C++单元测试
**一、简介**  **单元测试**作为白盒测试的一项基本技能,越来越受到测试行业界的青睐,掌握单元测试技能,将会在你面试、找工作中增加一份筹码。  如果之前没有掌握单元测试的基本方法,本系列单元测试的文章将带领你从入门到精通,一步一个脚印见证你的测试技能成长之路。  **GTest**是**Google**开源的一个**C++**单元测试框
C++实现简单的RPC框架
**简介**      RPC是远程过程调用(Remote Procedure Call)的缩写形式 ,RPC的目的是为了简化网络通信,让用户可以专注于业务处理,不用关心网络层的处理,真正实现在客户端A中调用函数F就可以调用服务端B中的函数F的目的。      RPC 模型引入存根进程( stub) 的概念, 对于服务端的服务类A,在客户端通过A::s
C++简单构造函数的写法
csdn主页:[https://blog.csdn.net/qq\_43605085](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fqq_43605085) 构造函数定义:是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总
C# 单元测试
单元测试怎么写?包含什么东西? 说下我自己的心得。 按照[官方文档](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fdocs.microsoft.com%2Fzh-cn%2Faspnet%2Fmvc%2Foverview%2Folder-versions-1%2Fcontact-man
C# 单元测试学习笔记
1、什么是单元测试 ![](https://oscimg.oschina.net/oscnet/7eb9e622bb99038aadca2a2c06cb38f348b.jpg) ![](https://oscimg.oschina.net/oscnet/9cac82d38c5dc11193724878f741ea33d6b.jpg) ![](https
C# 单元测试(入门)
注:本文示例环境 > VS2017 > XUnit 2.2.0 单元测试框架 > xunit.runner.visualstudio 2.2.0 测试运行工具 > Moq 4.7.10 模拟框架 #### 什么是单元测试? 确保软件应用程序按作者的期望执行操作,其中最好的一种方法是拥有自动化测试套件。 可以对软件应用程序进行各种不同的测试,
C# 简单数据类型
c#变量数据类型 变量的数据类型包括预定义的数据类型和自定义的数据类型,自定义的数据类型包括数组、枚举、结构和类,而预定义的数据类型如下表所示: **类型** **描****述** **范围****/****精度** **例子**   **object** **所有其它类型的最根本的** **基础类型**   **object o =
C#单例
单例模式: 步骤: 1.定义静态私有对象 2.构造函数私有化 3.定义一个静态的,返回值为该类型的方法,一般以Getinstance/getInit为方法名称 单例模式有懒汉和饿汉,最好使用饿汉 1.饿汉式---先实例化 public class Singleton { private stati
C#单元测试
什么叫单元测试(unit testing)? 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函 数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中 要进行的最低级别的测试活动,软
C#简单工厂模式
C#简单工厂模式 ======== 模型,建立一个模型,构建我们的实际工程,项目。 > ​ 所有面向对象的编程都是在我们生活中存在的,从词义的解释就是我们生活中的工厂就是负责生产产品的,而到开发中对应的就是NEW不同的对象,该模式主要解决的问题就是解决创建对象与该类的解耦。设计原则中经常说的类单一职责、封装性都有体现。 **编程中的简单工厂就是一个生产
C#操作MongoDB的简单实例
  最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself),   前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例。   one,启动本地的mongo服务like this. ![](https://oscimg.oschina.net/oscnet/adc1
C# .NET Socket 简单实用框架
背景: 首先向各位前辈,大哥哥小姐姐问一声好~ 这是我第一次写博客,目前为一个即将步入大四的学生,上学期在一家公司实习了半年,后期发现没有动力,而且由于薪水问题(废话嘛),于是跳槽到这家新的公司。 说到Socket,想必大家都或多或少有所涉及,从最初的计算机网络课程,讲述了tcp协议,而Socket就是对协议的进一步封装,使我们开发人员能够更加容易轻松
thrift简单示例 (基于C++)
这个thrift的简单示例, 来源于官网 (http://thrift.apache.org/tutorial/cpp), 因为我觉得官网的例子已经很简单了, 所以没有写新的示例, 关于安装的教程, 可以参考https://www.cnblogs.com/albizzia/p/10838646.html, 关于thrift文件的语法, 可以参考: https