请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问要被删除的节点 。
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
/**
* 请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点head ,只能直接访问要被删除的节点 。
* 题目数据保证需要删除的节点 不是末尾节点
* @param node
*/
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next=node.next.next;
}
代码就这么点。不难,但是当时也是想了一段时间没想出来。
由于不能访问头节点,我们就不能操作这个要删除的节点的前一个节点,所不能想着通过头节点来解决。
代码也很简单,其实就两步:这里假设我们要删的是 4 这个节点。
将 4 的下一个节点的value赋给 4这个节点的value;
node.val = node.next.val;
就得到:
接下来,直接将原来的 4 节点指向 4 的下一个节点的下一个节点
node.next=node.next.next;
就得到:
感觉有点狸猫换太子的意思。