删除中间节点
题目描述
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
解题思路
因为只能访问要删除的节点,因此可以考虑使用伪删除来实现节点的删除:将该节点下一个节点的值赋给该节点,然后删除下一节点即可。
复杂度分析
- 时间复杂度:O(1)。
- 空间复杂度:O(1)。
代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
ListNode next = node.next;
node.val = next.val;
node.next = next.next;
}
}
网友评论