C++实现简单的单链表

浪人
• 阅读 987

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

功能不多,学习使用

#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;
    }

};
点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
4个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
1年前
C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c
Stella981 Stella981
1年前
OpenCV检测轮廓极点(Python C++)
    今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。!(https://oscimg.oschina.net/oscnet/ae374a72c5404b00b0e976e499eedf36.png)    第一步:阈值处理分割出地图轮廓!(ht
Stella981 Stella981
1年前
Linux查看GPU信息和使用情况
1、Linux查看显卡信息:lspci|grepivga2、使用nvidiaGPU可以:lspci|grepinvidia!(https://oscimg.oschina.net/oscnet/36e7c7382fa9fe49068e7e5f8825bc67a17.png)前边的序号"00:0f.0"是显卡的代
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
1年前
Github标星5300+,专门为程序员开发文档开源管理系统,我粉了
!(https://oscimg.oschina.net/oscnet/a11909a041dac65b1a36b2ae8b9bcc5c432.jpg)码农那点事儿关注我们,一起学习进步!(https://oscimg.oschina.net/oscnet/f4cce1b7389cb00baaab228e455da78d0
Stella981 Stella981
1年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反
Stella981 Stella981
1年前
Flink SQL Window源码全解析
!(https://oscimg.oschina.net/oscnet/72793fbade36fc18d649681ebaeee4cdf00.jpg)(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MzgwNT