您的位置:首页 > Web前端

剑指offer题13_在O(1)时间内删除链表结点

2018-01-26 19:07 405 查看

一.题目:

给定单向链表的头指针和一个结点指针,给定一个函数在O(1)时间删除该结点。链表结点与函数定义如下:



二.分析:

共需考虑三种情况:

1.首先考虑的是并不是一定需要得到被删除结点的前一个结点,如果我们把下一个结点的内容复制到需要删除的结点上覆盖原有的内容,再把下一个结点删除即可。

2.如果需要删除的结点位于链表的尾部,那我们还是需要顺序遍历链表。

3.如果链表只有一个结点,此时除了删除还需要将头结点设置为NULL。

三.答案:

void deleteNode(ListNode** pListNode, ListNode* pToBeDeleted) {
if (!pListNode || !pToBeDeleted) {
return;
}

if (pToBeDeleted->next != NULL) {
ListNode* pNext = pToBeDeleted->m_pNext;
pToBeDeleted->m_nValue = pNext->m_nValue;
pToBeDeleted->m_pNext = pNext->m_pNext;
delete pNext;
} else if (*pListNode == pToBeDeleted) {
delete pListNode;
pToBeDeleted = NULL;
*pListNode = NULL;
} else {
ListNode* pNext = *pListNode;
while (pNext->m_pNext != pToBeDeleted) {
pNext = pNext->m_pNext;
}

pNext->m_pNext = NULL;
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}


四.相关题目:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息