16.在O(1)时间删除链表结点
给定单向链表的一个节点指针,定义一个函数在O(1)时间删除该结点。
假设链表一定存在,并且该节点一定不是尾节点。
数据范围:
链表长度 [1,500]。
样例:
输入:链表 1->4->6->8 删掉节点:第2个节点即6(头节点为第0个节点)
输出:新链表 1->4->8
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
//将当前节点的值替换为下一个节点的值(相当于把自己伪装成下一个节点)
node.val = node.next.val;
//将当前节点的next指针指向下下个节点(相当于跳过/删除原来的下一个节点)
node.next = node.next.next;
// 注意:这个方法实际上删除的是node.next节点
// 但因为node的值已经被替换成node.next的值,所以效果等同于删除node本身
}
}