首页 > 编程语言 >链表C++

链表C++

时间:2024-10-16 19:52:37浏览次数:9  
标签:head ListNode Linkedlist int C++ next 链表 curr

#include<iostream>
#include<stdexcept>
using namespace std;
#define eleType int
struct ListNode
{
	eleType m_data;
	ListNode* next;
	ListNode(eleType data)
	{
		m_data = data;
		next = NULL;
	}
};
class Linkedlist
{
private:
	ListNode* head;
	int size;
public:
	Linkedlist()
	{
		head = NULL;
		size = 0;
	}
	~Linkedlist();
	void insert(int i, eleType a);
	void remove(int i);
	ListNode* find(eleType a);
	ListNode* get(int i);
	void update(int i, eleType a);
	void print();
};
Linkedlist::~Linkedlist()
{
	ListNode* curr = head;
	if (curr != NULL)
	{
		ListNode* temp = curr;
		curr = curr->next;
		delete temp;
	}
}
 void Linkedlist::insert(int i, eleType a)
{
	if (i<0 || i>size)
	{
		throw std::out_of_range("下标不对");
	}
	else
	{
		ListNode* newNode = new ListNode(a);
		if (i == 0)
		{
			newNode->next = head;
			head = newNode;
		}
		else
		{
			ListNode* curr = head;
			for (int j = 0; j < i - 1; j++)
			{
				curr = curr->next;
			}
			newNode->next = curr->next;
			curr->next=newNode;
		}
		size++;
	}
}
 void Linkedlist::remove(int i)
 {
	 if (i<0 || i>=size)
	 {
		 throw std::out_of_range("下标不对");
	 }
	 else
	 {
		 if (i == 0)
		 {
			 ListNode* temp = head;
			 head = head->next;
			 delete temp;
		 }
		 ListNode* curr = head;
		 for (int j = 0; j < i - 1; j++)
		 {
			 curr = curr->next;
		 }
		 ListNode* temp2 = curr->next;
		 curr->next = temp2->next;
		 delete temp2;
		 size--;
	 }
 }
 ListNode* Linkedlist::find(eleType a)
 {
	 ListNode* curr = head;
	 while (curr && curr->m_data != a)
	 {
		 curr = curr->next;
	 }
	 if (curr->m_data != a)
	 {
		 cout << "没有该元素" << endl;
		 return NULL;
	 }
	 if (curr)
	 {
		 return curr;
	 }
 }
 ListNode* Linkedlist::get(int i)
 {
	 if (i < 0 || i >= size)
	 {
		 throw std::out_of_range("下标不对");
	 }
	 ListNode* curr = head;
	 for (int j = 0; j < i; j++)
	 {
		 curr = curr->next;
	 }
	 return curr;
 }
 void Linkedlist::update(int i, eleType a)
 {
	 if (i < 0 || i >= size)
	 {
		 throw std::out_of_range("下标不对");
	 }
	 ListNode* curr = head;
	 for (int j = 0; j < i; j++)
	 {
		 curr = curr->next;
	 }
	 curr->m_data = a;
 }
 void Linkedlist::print()
 {
	 ListNode* curr = head;
	 while (curr)
	 {
		 cout << curr->m_data << " ";
		 curr = curr->next;
	 }
	 cout << endl;
 }
 int main()
 {
	 Linkedlist list;
	 list.insert(0, 10);
	 list.insert(1, 20);
	 list.print();
	 return 0;
 }

标签:head,ListNode,Linkedlist,int,C++,next,链表,curr
From: https://blog.csdn.net/2401_83496535/article/details/142964210

相关文章

  • C++:Boost的安装和使用
    1、Boost简介Boost的本质就是一个开源C++库,它包含多种功能强大的模块,如:字符串文本处理模块、容器、算法、多线程、智能指针、线程池等模块2、Boost的下载和安装(1)Boost下载官网:http://www.boost.org/SourceForge:C++BoostLibrary在国内能够实现更快速的下载window系......
  • 链队(c++)
    //队列的顺序实现//线性表先进先出#include<iostream>usingnamespacestd;#defineMaxSize100typedefstructLinkNode{chardata;structLinkNode*next;}LinkNode,*QueuePtr;typedefstruct{  QueuePtrfront,rear;}LinkQueue;//初始化voidInitQueue(L......
  • 链栈(c++)
    //链栈#include<iostream>#include<string>usingnamespacestd;typedefstructStackNode{  chardata;  structStackNode*next;}StackNode,*LinkStack;//初始化boolInitStack(LinkStack&L){  L=NULL;   returntrue;}//入栈boolPush(......
  • 【C++】精妙的哈希算法
    ......
  • C/C++语言基础--C++异常看这一篇就够了
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言通过前面几节课,我们学习了抽象、封装、继承、多态等相关的概念,接下来我们将讲解异常,异常是专门处理错误的;这一次加了不少图标,希望大家喜欢;C语言后面也会继续更新知识点,如内联汇编;欢迎收藏+关注,本人将会持续更新......
  • 算法-中缀转后缀表达式(C++)
    因为操作数在后缀表达式中它们的顺序与中缀表达式一致,所以操作数不需要进行特殊处理,所以遇到数字就输出,遇到符号就经过处理再输出所以需要用一个存储结构存符号为什么用栈存储:要利用后进先出的特性出栈也就是加入到后缀表达式中,一部分一部分处理,处理完一部分,要处理他邻近的......
  • 打卡信奥刷题(056)用C++工具信奥P10566[普及组/提高] 「Daily OI Round 4」Analysis
    「DailyOIRound4」Analysis题目描述小C的信息技术老师给小C布置了一项作业,作业内容如下:有一个字符串,包含大小写字母和数字。你可以把任意一个字符变成另外一个字符,设变化之前字符的ASCII码为a......
  • C++构建工具-构建系统
    构建CI/CDCI这步,首先需要一个版本控制系统,当前最好用的就是git流程:主线分支上设置静态代码检查,用来检测每一笔提交的质量,比如命名规范等。 还会设置自动化单元测试,看守代码功能,并进行代码覆盖率分析代码拉取功能; 构建 安装包依赖项功能,依赖项需......
  • C++入门语法
    目录知识点补充1.C语言中的作用域作用域的种类作用域的影响2.以下是C++和C语言对全局变量和局部变量命名冲突的处理3.类型定义C++关键字命名空间1.C++提出的命名空间是为了解决C语言以下几个缺陷2.命名空间的3种定义方式2.1.正常的命名空间定义2.2.命名空间可以嵌......
  • C++ 排序算法(选择、冒泡、插入)
    八、选择排序(从小到大): 选择排序的基本思想是:每一趟从待排序的数据中,通过“打擂台”比较选出最小元素,放在这些数据的最前面。这样,第一趟把n个数中(第1个到第n个)最小的放在第一个位置,第二趟把剩余的n-1个数中(第2个到第n个)最小的放在第二个位置,第三趟把剩余的n......