问题描述:
给定单向链表的头指针和一个结点指针,定义一个函数在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.youkuaiyun.com/wsyw126/article/details/51371963
作者:WSYW126