请问给你链表要删除的节点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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。