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本身
    }
}
posted @ 2025-05-14 10:19  回忆、少年  阅读(1)  评论(0)    收藏  举报