假设以带头结点的循环链表表示队列_[动画leetcode高频面试之链表系列]2 删除链表中的节点...

6ff9b1137e2ff2e80520927479f0dc5e.png
这是我的面试经历以及整理的相关面试高频题目,希望对大家有帮助。面试集锦
老规矩,不白嫖,点赞再看!

复习链表的插入

链表的一个节点是由数据域和指针域构成,指针域的地址值为下个元素的地址。那么我们需要插入或者删除一个元素怎么处理呢?

bcf13da9025f80b4267a4f47c001f9e8.png

先查看原始链表结构,准备将结点x插入链表中。

5b8dd181a01d3b64a001a8224c78ccd1.png

此时我们需要先保存n节点的地址(300),n节点的地址存放在m节点的指针域,将此值赋值给x节点的指针域。(x->next=m->next),变成了下图所示。

43fafcc6a9e91c77c02851f9ed0638aa.png

此时再将m节点和x节点连接起来。m->next=x.如下图所示。

4856e9065126f9bc2f98074435e55c55.png

看到这里,有些小伙伴可能会有疑问了。如果是空链表,这样的插入方式就行不通的了呀(自己可以画图看看哈),对,这就是要说的重点了,哨兵。

哨兵结点是什么?

d9f33b24f7822e3f812aace1dad2ac08.png

复习链表的删除

上面简单介绍了带头结点的链表,在删除处理的时候同样适用,所以我们以后就直接采用带头结点的链表讲解。下面直接看看删除节点图。

6c808ac73cc14b8828c3961db758d7cf.png

一 题目 Leetcode237 删除链表的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 -- head = [4,5,1,9],它可以表示为:

3d57934093bdc86d535d8f4109800f1c.png

1 leetcode连接

原题连接

小蓝希望大家在此思考1分钟,

效果会更好哈!

2 题目解析

链表简述

  • 说到链表,难免会想到数组,数组的内存地址空间连续,查找速度快(O(1)),但是插入和删除会因为大量移动元素导致效率不高,所以引入了链表结构。
  • 链表中内存低地址不连续,通过"指针"将零散的地址链接在一起,如下图(单链表)所示。

解题思路

常规套路

1 找到待删除结点的上一个结点的指针。 2 将指针指向待删除的下一个结点。如下图7所示。

2416ef36031c0f57c6b969be6aca6068.png

仔细看题

1 发现没,题目并没有告诉我们其上一个结点,不要紧,我们可以想办法构造出一个结点,请看下。
2 目标还是删除5,最后结果为[4,1,9]。我们把需要删除的5结点的后面节点1赋值给它,如下图8.

9f55635aee78722329c830a8ebfa4046.png
嘿嘿,现在两个结点值1,不管删除哪一个我们都能获得结果,但是第二个节点1我们不方便删除,但是第三个结点1还是轻松的。假设为p指针指向删除的节点,那么直接就是p.next=p.next.next。如下图9.

2b85d44494e29e0599caab062d15be9c.png

3 代码实现

  • c++版本

c76a133fdf133f804bc3f02a9f4ced43.png
  • python版本

001e19c2556cc3e6c68e2d9a69e41856.png
  • java版本

416d4d220d74a3283ad083fdce56d3c5.png

4 收尾

系列算法题均采用三种不同的语言实现,满足不同小伙伴的需求。如有不对的地方希望小伙伴指出,感谢!

❤️ 看完三件事:如果您看完有一点点收获,快速迎娶白富美方式:

1 关注公众号「我是程序员小贱」,第一时间阅读最新的文章,公众号后台回复 [小天使] 送你 最新的编程技术资料。

2 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)

3 关注我和专栏,让我们成为好基友。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值