在O(1) 时间删除链表节点

struct Node {
	int val;
	Node * next;
};
void deleteNode(Node ** head, Node * target)
{
	assert(head != NULL && *head != NULL && target != NULL);
	
	//头结点的判断
	if(*head == target)
	{
		*head = target->next;
		delete target;
	}
	
	//尾节点的判断
	if(target->next == NULL){
	
		Node *p = *head;
		while(*p ->next != head)
			p = p->next;
	
		p->next = NULL;
		delete target ;
	}else{
	
		Node *p = target-next;
		target->val = p->val;
		target->next = p->next;
		delete p;
	}
}

  



posted @ 2013-09-14 10:50  冰点猎手  阅读(196)  评论(0编辑  收藏  举报