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

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点 

思路是将需要删除节点的值变为他的下一结点,然后删除它的下一结点,这样就像是变相删除了该节点。

void delete_node(node *list,node *toBeDeletedNode){
	if(toBeDeletedNode->next){            //不为尾节点
		node *p=toBeDeletedNode->next;	  //修改需要删除那个节点的值,再删除它的后一节点
		toBeDeletedNode->data=p->data;
		toBeDeletedNode->next=p->next;
		delete p;
	}else{                                //尾节点
		node *p=list;
		while(p->next!=toBeDeletedNode){  
			p=p->next;
		}
		p->next=NULL;
		delete toBeDeletedNode;
	}
}

posted @ 2011-04-06 15:02  akawhy  阅读(571)  评论(0编辑  收藏  举报