题目:
给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。
要想在O(1)时间搞定,绝对不能用遍历。
这里采用将后面的一个节点复制到当前节点的方法。
不过有特殊情况要考虑:
1.如果要删除的节点没有下一个节点:
则要找到上一个节点,并且将next设置为空,这个时候只能用遍历
2.如果当前链表就一个节点
由于java中没有指向指针的指针,所以用返回null。
public class Node {
Integer value;
Node next;
}
/**
* 在时间复杂度为O(1)的情况下删除链表的节点。<br/>
* 不过有个前提是要删除的这个节点必须在链表中包含,不然不会报错也不会改变原先的链表
* */
public static Node delete(Node head, Node node) {
// 检查空
if (node == null) {
throw new RuntimeException();
}
Node next = node.next;
if (next != null) {