剑指offer之面试题13在O(1)时间删除链表结点

问题描述

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

结构题如下:

struct ListNode{
	int value;
	ListNode *next;
};
假设链表头结点为Head,删除结点为D。

这个题一般来讲大家的第一反应肯定是从头遍历,那么时间复杂度肯定是O(n)。

为了实现O(1)时间复杂度。

我们可以另寻它法,我们可以发现我们其实可以不用删除该结点D。

我们的目的是删除D的值,所以我们可以将D的后面结点的值(D->next->value)赋值给D,而后将D后面的结点(D->next)删除,并将D->next->next的赋值给D->next。

这样我们就完成了在时间复杂度为O(1)的情况下,删除一个结点。

参考资料
剑指offer

备注
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51371963
作者:WSYW126

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值