请问给你链表要删除的节点x,但是不给你头节点head,你能将x删除吗

本文探讨了在不提供链表头节点的情况下,如何在单链表中删除指定节点x。单链表由于缺乏前驱节点,无法直接删除,而双链表则因其last指针可以找到前驱得以实现。重点介绍了内存机制与解决方案,以及面试中可能遇到的问题和技巧。
摘要由CSDN通过智能技术生成

请问给你链表要删除的节点x,但是不给你头节点head,你能将x删除吗?

提示:本题考的就是你对内存的理解


题目

请问给你链表要删除的节点x,但是不给你头节点head,你能将x删除吗?


一、审题

示例:1-2-3-4-5
x=3
你能删除x吗?


二、解题

java中的内存知识,既然问你这个题目,就是为了解java的内存与否?

单链表不能

如果你是单链表,没有head,由于单链表只有next指针,你告诉我x要删除,我是无法找到x的上一个点的
因为要删除x,需要x的上一个点k=x的下一个点,跳指删除!
在这里插入图片描述
正常情况下,有head,这样删除:
在这里插入图片描述
然后此时,3单独指向null,JVM就会自动删除它

但是,如果没有head,你要删除x=3的话,你可以这么干:令x=null,但是后面的4-5就断了,这没删除成功啊!!
在这里插入图片描述
又或者没有head,你要删除x=5
在java中链表其实是这么存的
在这里插入图片描述
java 中null是特定的地址,你要删除x=5,没有head,直接令5指向null,等于没干,对原来那个链表不产生任何的影响!!!
这就是java内存的机制,你知道,就明白了
没有head,是无法找到x的上一个点,完成删除任务的。

双链表可以

既然要找x上一个点,如果有last指针,那就好办了哇!
在这里插入图片描述


总结

提示:重要经验:

1)单链表的内存机制,要了解,如果不给head,由于单链表只有1个next指针,无法访问上一个点,故不能删除
2)双链表有双指针last和next,可以索引上一个点,故,直接给x就能删除!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值