剑指offer面试题13-在O(1)时间删除链表的节点

这是一篇关于如何在O(1)时间复杂度内删除单向链表中指定节点的博客。主要方法是将待删除节点的后续节点的值复制到待删除节点,然后直接更新待删除节点的next。但需注意特殊情况:当待删除节点为尾节点或链表只有一个节点时,需要特别处理。
摘要由CSDN通过智能技术生成
题目:

给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。



要想在O(1)时间搞定,绝对不能用遍历。

这里采用将后面的一个节点复制到当前节点的方法。

不过有特殊情况要考虑:

1.如果要删除的节点没有下一个节点:

则要找到上一个节点,并且将next设置为空,这个时候只能用遍历

2.如果当前链表就一个节点

由于java中没有指向指针的指针,所以用返回null。


public class Node {
	Integer value;
	Node next;
}

/**
	 * 在时间复杂度为O(1)的情况下删除链表的节点。<br/>
	 * 不过有个前提是要删除的这个节点必须在链表中包含,不然不会报错也不会改变原先的链表
	 * */
	public static Node delete(Node head, Node node) {
		// 检查空
		if (node == null) {
			throw new RuntimeException();
		}
		Node next = node.next;
		if (next != null) {
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值