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.插入节点
void InsertNode(MyLinkList* head, int val, int n)
{
MyLinkList* tmp = head;
while (n-- && tmp) {
tmp = tmp->next;
}
if (tmp == nullptr)
return;
MyLinkList* nextNode = tmp->next;
tmp->next = new MyLinkList(val, nextNode);
}
4.删除节点
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.运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6939d781019094d79460130b801a04a8.png)
链表相关的算法题