- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题是关于需要删除节点的 lintcode 练习,但由于某种原因我的简单程序无法运行。
例如,输入(1->2->3->4->null, 3)应该输出(1->2->4->null),我的想法是删除下一个节点并“复制”它输入这个节点的值。
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param node: the node in the list should be deleted
* @return: nothing
*/
public void deleteNode(ListNode node) {
// write your code here
ListNode pnext;
if (node != null) {
if (node.next != null) {
ListNode tempnode = node.next;
if (node.next.next != null) {
pnext = node.next.next;
}
else {
pnext = null;
}
node.next = null; //delete next node
node = tempnode; // give next node to THIS node
node.next = pnext; // link next
}
}
else node = null;
}
}
我对给节点赋予值(value)感到很困惑,node1 = node2
是否有效?我知道 node.val
可以。任何人都可以简单地指导我吗?
最佳答案
您没有在帖子中包含实际发生的情况,也没有包含创建列表的部分,所以我只能假设发生的情况是您没有删除 3,而是删除了 4?或者它根本不删除任何东西?
所以你有一个方法应该删除一个节点,你想删除的节点作为参数给出。但是由于您的列表仅以一种方式链接,因此您无法确定它之前的节点(它包含对要删除的节点的引用)。实际上删除方法应该像这样简单:
public void deleteNextNode(ListNode node) {
if(node == null || node.next == null) return; //nothing to delete
if(node.next.next == null){
node.next = null;
return;
} else{
node.next = node.next.next;
}
}
虽然我没有测试过。只要您不存储任何其他对节点的引用就足够了,否则您需要在 else 部分显式调用 next.null。
编辑:我的函数删除您传递的节点之后的节点,但您想要一个删除您传递的节点的函数。这里的问题是前一个节点存储了对要删除的节点的引用,但是您无法仅通过对要删除的节点的引用来确定那个节点。因此,要么使用此函数并始终传递前一个节点,要么制作一个包装函数并遍历列表并始终保护前一个节点并使用该节点调用该函数:
public ListNode deleteNode(ListNode start, ListNode deleteMe)
{
ListNode prev = start;
if(start == deleteMe) return start.next;
while(prev.next != null) {
if(prev.next == deleteMe)
deleteNextNode(prev);
prev = prev.next;
}
return start;
}
请注意,我让该函数返回一个 ListNode,这始终是列表的第一个节点(以防您决定删除第一个节点)。希望对您有所帮助
关于java - deleteNode 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35827638/
我正在尝试构建一个模拟服务中心的客户列表类。我的 deleteNode 函数只会在不破坏链接的情况下正确删除列表的头部。 我已经尝试绘制链表的图表并手动跟踪程序,但在纸面上,它对我来说似乎是正确的。问
我的问题是关于需要删除节点的 lintcode 练习,但由于某种原因我的简单程序无法运行。 例如,输入(1->2->3->4->null, 3)应该输出(1->2->4->null),我的想法是删除下
我需要一个 IntervalTree或 Java 中的 RangeTree 实现,但很难找到具有有效删除支持的实现。 在 sun.jvm.hotspot.utilities.IntervalTree
本文整理了Java中com.alibaba.wasp.zookeeper.ZKAssign.deleteNode()方法的一些代码示例,展示了ZKAssign.deleteNode()的具体用法。这些
本文整理了Java中com.alibaba.wasp.zookeeper.ZKUtil.deleteNode()方法的一些代码示例,展示了ZKUtil.deleteNode()的具体用法。这些代码示例
本文整理了Java中org.apache.hadoop.hbase.zookeeper.ZKUtil.deleteNode()方法的一些代码示例,展示了ZKUtil.deleteNode()的具体用法
本文整理了Java中io.pravega.controller.store.stream.ZKStoreHelper.deleteNode()方法的一些代码示例,展示了ZKStoreHelper.de
我正在制作一个代码,我必须插入一个带有随机数的节点并按顺序删除每个数字。我已经完成了其他功能,我正在尝试编写 void InsertNode(int a) 和 void DeleteNode(int
我是一名优秀的程序员,十分优秀!