![6ff9b1137e2ff2e80520927479f0dc5e.png](https://i-blog.csdnimg.cn/blog_migrate/cf56ad3cb87dd314b4077619ebf8c2e6.jpeg)
这是我的面试经历以及整理的相关面试高频题目,希望对大家有帮助。面试集锦
老规矩,不白嫖,点赞再看!
复习链表的插入
链表的一个节点是由数据域和指针域构成,指针域的地址值为下个元素的地址。那么我们需要插入或者删除一个元素怎么处理呢?
![bcf13da9025f80b4267a4f47c001f9e8.png](https://i-blog.csdnimg.cn/blog_migrate/3928b7db33d60abdd4275aa8b4fbebbb.jpeg)
先查看原始链表结构,准备将结点x插入链表中。
![5b8dd181a01d3b64a001a8224c78ccd1.png](https://i-blog.csdnimg.cn/blog_migrate/2fd7381c09c087b968af632c01f1cbbf.jpeg)
此时我们需要先保存n节点的地址(300),n节点的地址存放在m节点的指针域,将此值赋值给x节点的指针域。(x->next=m->next),变成了下图所示。
![43fafcc6a9e91c77c02851f9ed0638aa.png](https://i-blog.csdnimg.cn/blog_migrate/73151ad97b6e4e00e1584c1a3e30ddb8.jpeg)
此时再将m节点和x节点连接起来。m->next=x.如下图所示。
![4856e9065126f9bc2f98074435e55c55.png](https://i-blog.csdnimg.cn/blog_migrate/96ad2adad481c7e290ff906922eff80e.jpeg)
看到这里,有些小伙伴可能会有疑问了。如果是空链表,这样的插入方式就行不通的了呀(自己可以画图看看哈),对,这就是要说的重点了,哨兵。
哨兵结点是什么?
![d9f33b24f7822e3f812aace1dad2ac08.png](https://i-blog.csdnimg.cn/blog_migrate/ba6417689542dea26e8b2129fd1d943d.jpeg)
复习链表的删除
上面简单介绍了带头结点的链表,在删除处理的时候同样适用,所以我们以后就直接采用带头结点的链表讲解。下面直接看看删除节点图。
![6c808ac73cc14b8828c3961db758d7cf.png](https://i-blog.csdnimg.cn/blog_migrate/6f773579d5e5e8aa60d030a74baa5642.jpeg)
一 题目 Leetcode237 删除链表的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为:
![3d57934093bdc86d535d8f4109800f1c.png](https://i-blog.csdnimg.cn/blog_migrate/200974e8045113f9e18d91a000db9c42.jpeg)
1 leetcode连接
原题连接
小蓝希望大家在此思考1分钟,
效果会更好哈!
2 题目解析
链表简述
- 说到链表,难免会想到数组,数组的内存地址空间连续,查找速度快(O(1)),但是插入和删除会因为大量移动元素导致效率不高,所以引入了链表结构。
- 链表中内存低地址不连续,通过"指针"将零散的地址链接在一起,如下图(单链表)所示。
解题思路
常规套路
1 找到待删除结点的上一个结点的指针。 2 将指针指向待删除的下一个结点。如下图7所示。
![2416ef36031c0f57c6b969be6aca6068.png](https://i-blog.csdnimg.cn/blog_migrate/85cfb4e3af9d0f092984892b757a1815.jpeg)
仔细看题
1 发现没,题目并没有告诉我们其上一个结点,不要紧,我们可以想办法构造出一个结点,请看下。
2 目标还是删除5,最后结果为[4,1,9]。我们把需要删除的5结点的后面节点1赋值给它,如下图8.
![9f55635aee78722329c830a8ebfa4046.png](https://i-blog.csdnimg.cn/blog_migrate/4115ece767950a6ada356d8f2cd2e8d4.jpeg)
嘿嘿,现在两个结点值1,不管删除哪一个我们都能获得结果,但是第二个节点1我们不方便删除,但是第三个结点1还是轻松的。假设为p指针指向删除的节点,那么直接就是p.next=p.next.next。如下图9.
![2b85d44494e29e0599caab062d15be9c.png](https://i-blog.csdnimg.cn/blog_migrate/fa12dab9a52bd5653c76a663f656ccd6.jpeg)
3 代码实现
- c++版本
![c76a133fdf133f804bc3f02a9f4ced43.png](https://i-blog.csdnimg.cn/blog_migrate/0f854d98de0337a1e3147855192533a2.jpeg)
- python版本
![001e19c2556cc3e6c68e2d9a69e41856.png](https://i-blog.csdnimg.cn/blog_migrate/b5f46096768132aa12787d6193d76c67.jpeg)
- java版本
![416d4d220d74a3283ad083fdce56d3c5.png](https://i-blog.csdnimg.cn/blog_migrate/8251e5fccabe44b23f7110d1761fe84b.jpeg)
4 收尾
系列算法题均采用三种不同的语言实现,满足不同小伙伴的需求。如有不对的地方希望小伙伴指出,感谢!
❤️ 看完三件事:如果您看完有一点点收获,快速迎娶白富美方式:
1 关注公众号「我是程序员小贱」,第一时间阅读最新的文章,公众号后台回复 [小天使] 送你 最新的编程技术资料。
2 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
3 关注我和专栏,让我们成为好基友。