🤵♂️ 个人主页: 叶秋学长
👨💻 作者简介: 全栈领域新星创作者
🌐 推荐一款找工作神器网站:《牛客网》 |笔试题库|面试经验|实习招聘内推|📒 系列专栏: 《秋招面试题》
🐋 希望大家多多支持😘一起进步呀!
📝 如果文章对你有帮助的话,欢迎评论💬点赞👍收藏📂加关注
前言:链表是数据结构中重要的一个章节,他的重要性也不言而喻,在未来不管是笔试还是面试都会遇到这类的题目,所以接下来我就会把一些链表的常考的题目全部整理出来供大家学习指正。
点击下面链接即可进行刷题学习
开始刷题
推荐的原因
刷题网站何其多,但好的刷题网站却不多,以下几点就是我推荐的原因:
1️⃣全面
2️⃣大众
首先用的人很多,可以看到很多的题解,其次如果有问题也会有很多人回答
3️⃣熟悉oj环境
我们以后找工作的时候很多公司都会用《牛客网》,我们可以提前熟悉环境
描述
请你实现一个链表。
操作:
insert x y:将yy加入链表,插入在第一个值为xx的结点之前。若链表中不存在值为xx的结点,则插入在链表末尾。保证xx,yy为int型整数。
delete x:删除链表中第一个值为xx的结点。若不存在值为xx的结点,则不删除。输入描述:
第一行输入一个整数nn (1\le n \le 10^41≤n≤104),表示操作次数。
接下来的nn行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。输出描述:
输出一行,将链表中所有结点的值按顺序输出。若链表为空,输出"NULL"(不含引号)。
输入:5 insert 0 1 insert 0 3 insert 1 2 insert 3 4 delete 4 输出: 2 1 3
本题主要进行 在指定位置插入节点 以及 删除指定位置节点 的链表操作的模拟(本题解使用带头节点的链表)
首先在结构体中定义用于存储节点数据的
data
和用于指向下一个节点的结构体指针next
。
对于插入操作,需要在第一次出现指定值的节点之前的位置进行节点的插入,因此需要两个指针,
p
指针向后遍历链表寻找指定值节点,q
指针跟随在p
指针之前,以便于新节点的插入。当p
指针找到指定值节点或为空时,便new
一个新节点,将其插入到q
节点之后即可。
对于删除操作,与插入操作类似,依然需要
p
和q
两个指针,当p
指针找到指定位置后,将q
指针的next
指向p
指针的next
,然后将p
指针的next
置空,即可delete p
,达到删除指定位置节点的要求。
我的解题思路如下:
- #include<iostream>
- using namespace std;
- struct List
- {
- int data;
- List* next;
- };
- void insert(List* p, int x, int y) // 在指定位置插入节点
- {
- List* q = p;
- p = p->next;
- while(p != NULL)
- {
- if(p->data == x)
- {
- break;
- }
- q = p;
- p = p->next;
- }
- List* t = new List();
- t->data = y;
- q->next = t;
- t->next = p;
- }
- void del(List* p, int x) // 删除指定位置节点
- {
- List* q = p;
- p = p->next;
- while(p != NULL)
- {
- if(p->data == x)
- {
- q->next = p->next;
- p->next = NULL;
- delete p;
- return ;
- }
- q = p;
- p = p->next;
- }
- }
- int main()
- {
- int n;
- cin>>n;
- List* head = new List();
- head->next = NULL; // 创建带头节点的链表
- for(int i = 0; i < n; i++)
- {
- string op;
- cin>>op;
- if(op == "insert")
- {
- int x, y;
- cin>>x>>y;
- insert(head, x, y);
- }
- if(op == "delete")
- {
- int x;
- cin>>x;
- del(head, x);
- }
- }
- List* f = head->next; // 因为带头节点,因此需要从head->next开始遍历链表
- if(f == NULL)
- {
- cout<<"NULL";
- }
- while(f != NULL)
- {
- cout<<f->data<<" ";
- f = f->next;
- }
- return 0;
- }
点击右下方的自测运行,查看结果:
这样就成功刷完一道算法题,学长亲测非常好用的《牛客网》刷题神器,还不赶快跟着学长一起卷起来~~