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版权协议,转载请附上原文出处链接和本声明。