在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时间删除链表某一节点的主要内容,如果未能解决你的问题,请参考以下文章