单链表的实现

本文详细介绍了链表数据结构的基本操作实现,包括插入、删除、查找元素及获取链表长度等核心功能。通过具体的C++代码示例,展示了如何创建链表节点、初始化链表、插入指定位置的元素、删除特定元素、查找链表中是否存在某元素以及遍历显示整个链表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为今天没有时间了,只实现了一些简单的操作,功能还不全,有待增强
1.头文件

#ifndef List
#define List
class Node{
public:
	int date;
	Node *next;
};
class Linklist{
public:
	Linklist();
	~Linklist();
	int getLength();
	bool insertElem(int index, int elem);
	bool delElem(int elem);
	void display();
	Node* findElem(int elem);
private:
	Node *head;
};
#endif 

2.具体实现

#include<iostream>
#include"Linklist.h"
using namespace std;

Linklist::Linklist()
{
	head = new Node;
	head->date = 0;
	head->next = nullptr;
}
Linklist::~Linklist()
{
	Node* ptr1 = this->head;
	Node* ptr2 = this->head;
	while (ptr2 != nullptr)
	{
		ptr2 = ptr2->next;
		delete ptr1;
		Node* ptr1 = ptr2;
	}
	delete ptr2;
	delete ptr1;
	delete head;
	ptr1 = nullptr;
	ptr2 = nullptr;
	head = nullptr;
}
Node* Linklist::findElem(int elem){
	Node* ptr = head;
	if (ptr->next == nullptr){
		cout << "empty Linklist" << endl;
		return nullptr;
	}
	else
	{
		while (ptr->next != nullptr){
			if (ptr->date == elem)
				return ptr;
			ptr = ptr->next;
		}
		return nullptr;
	}
}
bool Linklist::insertElem(int index,int elem){
	if (index <= 0 || index > (getLength()+1)){
		cout << "wrong index" << endl;
		return false;
	}
	int num = 1;
	Node* ptr1 = new Node;
	ptr1->date = elem;
	Node* p = head;
	while (num != index)
	{
		p = p->next;
		num++;
	}
	ptr1->next = p->next;
	p->next = ptr1;
	return true;
}
void Linklist::display(){
	if (head == nullptr || head->next == nullptr)
	{
		cout << "Linklist is empty" << endl;
		return;
	}
	Node* ptr = head;
	while (ptr->next != nullptr)
	{
		ptr = ptr->next;
		cout << ptr->date << " ";
	}
	cout << endl;
}
int Linklist::getLength(){
	int num = 0;
	Node* ptr = head;
	while (ptr->next != nullptr)
	{
		num++;
		ptr = ptr->next;
	}
	return num;
}
bool Linklist::delElem(int elem){
	Node* ptr1 = findElem(elem);
	if (ptr1 == nullptr)
		return NULL;
	Node* ptr2 = head;
	if (ptr2->next != ptr1)
	{
		ptr2 = ptr2->next;
	}
	ptr2->next = ptr1->next;
	delete ptr1;
	ptr1 = nullptr;
	return true;
}
void main(){
	Linklist list;
	list.insertElem(1, 2);
	list.display();
	list.insertElem(2, 3);
	list.insertElem(3, 8);
	list.insertElem(1, 2);
	list.insertElem(2, 3);
	list.insertElem(4, 6);
	list.insertElem(1, 2);
	list.insertElem(1, 5);
	list.display();
	list.delElem(2);
	list.delElem(8);
	list.delElem(2);
	list.display();
	system("pause");
	return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值