在O时间删除链表某一节点

Posted ssopp24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在O时间删除链表某一节点相关的知识,希望对你有一定的参考价值。

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


struct ListNode

	int	m_nValue;
	ListNode* m_pNext;
;

void DeleteNode( ListNode** pListHead, ListNode* pToBeDeleted )

	//1.链表为空
	if ( NULL == *pListHead || NULL == pToBeDeleted )
		return;

	//2.链表只有一个结点						//O(1)
	if ( *pListHead == pToBeDeleted )
	
		delete pToBeDeleted;
		pToBeDeleted = NULL;
		*pListHead = NULL;

		return;
	

	//3.被删除结点为链表尾节点					//O(N)
	if ( NULL == pToBeDeleted->m_pNext )
	
		ListNode* pPrev = *pListHead;

		while ( pToBeDeleted != pPrev->m_pNext )
			pPrev = pPrev->m_pNext;

		delete pToBeDeleted;
		pToBeDeleted = NULL;
		pPrev->m_pNext = NULL;

		return;
	

	//4.被删除结点是至少有两个结点的链表非尾节点//O(1)
	ListNode* pNext = pToBeDeleted->m_pNext;

	pToBeDeleted->m_nValue = pNext->m_nValue;
	pToBeDeleted->m_pNext = pNext->m_pNext;

	delete pNext;
	pNext = NULL;
	return;




以上是关于在O时间删除链表某一节点的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer之在O时间删除链表节点

在O时间复杂度删除链表节点

在O时间复杂度删除链表节点

链表在O的时间删除链表的节点

在O时间内删除链表节点(剑指offer_18.1)

第六十题(在O时间内删除链表结点)