C++实现简单的单链表

浪人 等级 322 0 0

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

功能不多,学习使用

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

};
收藏
评论区

相关推荐

创建型模式之单例设计模式
什么是单例设计模式? 顾名思义,只有一个实例。 单例模式它主要是确保一个类只有一个实例,并且可以提供一个全局的访问点。 废话少说,直接上干货了 单例模式之饿汉式 所谓饿汉式,顾名思义,“ 它很饿 ”。所以说,它一旦被加载进来,就会直接实例化一个对象。 例如: language class Singleton { private static fin
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
Spring Cloud OAuth2 微服务认证授权
OAuth 2.0 是用于授权的行业标准协议,它致力于简化客户端开发人员的工作,同时为 Web 应用、桌面应用、移动应用等各种客户端应用提供了特定的授权流程。本文讲解如何使用 OAuth2 协议来授权客户端应用访问 Spring Cloud 微服务。 微服务认证授权概述 单点登录 相比于单体应用,微服务应用需要在多个服务之间共享
Python Django开发 经验技巧总结(一)
1.前后台的数据传递view HTML:使用Django模版views.py代码:pythonfrom django.shortcuts import renderdef main_page(request): data 1,2,3,4 return render(request, 'index.html', {'data
C语言入门系列之1.C语言概述和上机运行简单C程序
一、C语言的发展过程C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言,同时由B.W.Kernighan和D.M.Ritchit合著了著名的《THE C PROGRAMMING LANGUAGE》一书 ,通常简称为《K&R》,也有人称之为 《K&R》标准。但是,在《K&R》中并没有定义一个完整的C语言标
英语简单句及其基本结构
简单句的五种基本结构 1:主谓 2:主谓宾 3:主谓表谓语:系动词be感官动词:look(看起来),sound.taste,smell,feel表变化:get,become,turn(颜色上的改变),grow(渐渐变得),fall(一般指变坏)表保持:keep,stay,remain,stand表表象:seem,appear表终止:prove
Vue进阶(幺柒叁):表单元素日期校验
本文主要讲解基于elementui datetimepicker实现日期时间,在表单校验中的校验逻辑及实现方法。注:在表单检验时间组件时,应在检验中增加type: 'date',否则会提示检验对象错误问题。vue部分<开始/结束日期,时间<template <elrow style"margintop:
WebRTC 简单学习
WebRTC花了两天时间简单了解了一下WEB RTC,并由此写入三个DEMO。1. p2p 点对点2. o2m 一对多3. live 直播目前主要都是按p2p进行的简单扩展。 WebRTC 简单了解目前资料不算少,不过确实也不多,而且理论偏多,新手入门其实还是有点压力的。 这边推荐几个资料和视频。 记得出问题看看文档先 没有思路的时候记得看看 这个
C++写一个简单排序算法
分析算法步骤:1、暂定元素排列第0个为最小值,下标为min;2、然后从左往右依次扫描,与min的关键字比较,若比min的更小,则更新min下标为当前下标;3、并且把先前的最小值与当前找到目标的元素交换位置。cinclude<iostreamusing namespace std;void Swap(int &a, int &b) int tem
Excel表格太单调?教你可视化三板斧!
大家好,我是小五🐶Excel是我们经常来处理数据的工具,也是最便捷的可视化武器。但如果直接给别人展示处理后的表格数字,往往显得单调又无聊,一眼难以看出个所以然。所以今天我将带大家用三种不同的方式,来美化我们的表格,轻松玩转Excel可视化。REPT函数REPT函数是重复函数,可根据指定次数重复文本,具体语法结构如下:REPT (重复字符串,重复次数) 可以
Qt简单使用表格
接在Qt简单登录后https://www.helloworld.net/p/4enJFnZUQAC8G 添加新文件 使用的组件table weight和 table view头文件c++ifndef MANAGEMENTHdefine MANAGEMENTHinclude <QWidgetinclude <QMouseEventnamespace Ui cl
手写一个简单的线程池
<section id"nice" datatool"mdnice编辑器" datawebsite"https://www.mdnice.com" style"lineheight: 1.6; wordbreak: breakword; wordwrap: breakword; textalign: left; fontfamily: OptimaRegul
简简单单复习一哈ArrayList和Arrays.asList()
1、面向对象补充(详见面试补充) 基于JDK11静态代码块 非静态代码块 无参/有参构造在同一次编译运行时,静态代码块只会被调用一次ListArrayList (数组,初始容量为10)注: 除了通过 Iterator 自己的remove或add方法,迭代器将抛出ConcurrentModificationException 。 因此,面对并
简简单单复习一哈HashMap
HashMap可被序列化,线程不安全,允许null值和null键,安全的MapCollections.synchronizedMap(): / Returns a synchronized (threadsafe) map backed by the specified map. In order to guarantee s