C++链表的基本用法

PS.更多数据结构知识详见:

八大数据结构

链表的用法

1.链表的数据结构

//节点的定义
struct  MyLinkList
{
	int val;
	MyLinkList* next;
	MyLinkList(int val = 0, MyLinkList* next = nullptr) :val(val),next(next){};
};

2.构建一个链表

void CreatLinkList(MyLinkList* head)
{
	cout << "请输入链表的节点值,输入0则链表构建结束!" << endl;
	int val;
	MyLinkList* tmp = head;
	cin >> val;
	while (val) {
		tmp->next = new MyLinkList(val);
		tmp = tmp->next;
		cin >> val;
	}
}

3.插入节点

//插入节点(在第n个节点后插入一个值为val的节点)
void InsertNode(MyLinkList* head, int val, int n)
{
	MyLinkList* tmp = head;
	
	//定位到第n个节点
	while (n-- && tmp) {
		tmp = tmp->next;
	}

	//链表节点数小于n
	if (tmp == nullptr)
		return;

	//保留第n个节点的后一个节点
	MyLinkList* nextNode = tmp->next;
	tmp->next = new MyLinkList(val, nextNode);
}

4.删除节点

//删除节点(删除所有值为val的节点)
void RemoveNode(MyLinkList* head, int val)
{
	MyLinkList* tmp = head;
	while (tmp->next)
	{
		if (tmp->next->val != val)
			tmp = tmp->next;
		else
		{
			MyLinkList* delNode = tmp->next;
			tmp->next = delNode->next;
			delete delNode;
		}
	}
}

5.打印链表

//打印链表
void printLinkList(MyLinkList* head)
{
	cout << "打印链表的值" << endl;
	while (head->next)
	{
		cout << head->next->val << "	";
		head = head->next;
	}
	cout << endl << endl;
}

6.测试

#include <iostream>
#include<vector>
using namespace std;
#include"link.h"
int main()
{
	//虚拟头结点
	MyLinkList* head = new MyLinkList;
	CreatLinkList(head);
	printLinkList(head);

	//插入节点
	cout << "在第三个节点后插入6" << endl;
	InsertNode(head, 6, 3);
	printLinkList(head);

	//删除节点
	cout << "删除值为2的所有节点" << endl;
	RemoveNode(head, 2);
	printLinkList(head);
	return 0;
}

7.运行结果

在这里插入图片描述

链表相关的算法题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值