java – 将LinkedList节点设置为null
我之前在编码书中遇到过这个问题.
“给出一个算法来删除单链表中间的节点 书中给出的解决方案是这样的: public static boolean deleteNode(LinkedListNode n) { if (n == null || n.next == null) { return false; // Failure } LinkedListNode next = n.next; n.data = next.data; n.data = next.data; n.next = next.next; return true; } 当然,这是一个很好的解决方案,是O(1).不过,这本书最后指出了这一点. “请注意,如果要删除的节点是最后一个节点,则无法解决此问题 我错过了一些明显的东西吗?为什么我不能只是在主体之前检查方法,检查n.next是否等于null,如果是,只需将n设置为null并返回true?有什么理由我不能这样做吗? 解决方法
这段代码真正做的是将下一个节点复制到给定节点.净效果就好像当前节点被删除一样,但实际上它只是被下一个节点覆盖了.
也就是说,你要删除此列表中的B: A -> B -> C -> D 结果列表如下所示: +------+ A -> B(Ccopy) ---+ C -+-> D 现在,您无法对节点D执行此操作,因为没有要复制的下一个节点.
将n设置为null将不会执行任何操作. n只是对要删除的列表节点的引用.如果更改n,则实际上不会更改列表中的任何内容.例如,假设您要在同一列表中删除D.它看起来像这样: n | v A -> B -> C -> D 如果将n设置为null,则最终结果如下: n---> null A -> B -> C -> D 请注意,列表中没有任何内容发生变化. 在这种情况下删除D的唯一方法是修改C.next指向null.也就是说,你想要这个: +----> null A -> B -> C --+ D 这需要修改C,但是在单链表中,你没有简单的方法从D访问C.你必须从列表的开头搜索,直到找到节点x,使x.next == D. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 利用Java快速查找21位花朵数示例代码
- Java下3中XML解析 DOM方式、SAX方式和StAX方式
- Java笔记:集合
- java – GQL禁止文字错误,google datastore
- java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58
- 什么是RESTFUL?REST的请求方法有哪些,有什么区别?
- 为什么Java BufferedReader()不正确地读取阿拉伯语和汉字?
- 利用jmap和MAT等工具查看JVM运行时堆内存
- 异常:android.os.NetworkOnMainThreadException
- Hibernate delete方法:删除对象