删除中间节点
实现一种算法,删除单向链表中间的某个节点(除了第一个和最后一个节点,不一定是中间节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
题目来源:力扣
正常情况下,我们想要删除链表的某个节点,操作是修改前一个元素的 next 就可以了;但是本题中我们只能访问要删除的节点,所以我们可以把要删除节点的下一个节点的值拿过来覆盖掉要删除的值,然后把要删除节点的 next 指向下一个节点的 next 即可,相当于变相把此节点删除了。
解法:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} node
* @return {void} Do not return anything, modify node in-place instead.
*/
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};
复杂度分析:
时间复杂度:O(1)
空间复杂度:O(1)