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.运行结果

在这里插入图片描述

链表相关的算法题


版权声明:本文为Lc_summer原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。