【题目】
链表节点值类型为int,给定一个链表中的节点node,但不给定整个链表的头结点。如何在链表中删除node?请实现这个函数,并分析这么会出现哪些问题。
要求时间复杂度为O(1)
【代码】
//一种怪异的节点删除方式
public static void removeNode(Node node){
if(node==null){
return;
}
Node next=node.next;
if(next==null){
throw new RuntimeException("cannot remove last node.");
}
//本质是复制下一个结点的值,再把下一个结点删除
node.value=next.value;
node.next=next.next;
}
【问题】
1.无法删除最后一个节点。若要求删除最后一个节点,而该节点根本没有下一个节点来替代它被删除,只有让它的前一个节点指向Null,但前一个节点根本找不到。
2.本质是把node节点值改变,然后删除node的下一个节点。实际工程中可能会带来很大问题,如:节点代表复杂的结构,难以复制;改变节点的值这个操作都是被禁止的…..