剑指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; } }
四.相关题目:
无相关文章推荐
- 剑指Offer面试题12打印1到最大的n位数,面试题13在O(1)时间删除链表结点
- 剑指Offer_面试题13_在O(1)时间删除链表结点
- 剑指offer-面试题 13:在 O( 1)时间删除链表结点
- 【剑指offer-Java版】13O(1)时间删除链表结点
- 剑指offer面试题13——在O(1)时间删除链表结点
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 【剑指offer 面试题13】在 O(1) 时间删除链表结点
- 【剑指offer】链表相关-在o(1)时间删除链表结点13
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点
- 剑指Offer----面试题13:在O(1)时间删除链表结点
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 【面试题】剑指offer13--在O(1)时间删除链表结点
- 剑指offer-面试题13-在O(1)时间删除链表结点
- 剑指Offer-13-在O(1)时间删除链表结点
- 【剑指offer】面试题13:在O(1)时间删除出链表结点
- 剑指offer13 在O(1)时间删除链表的结点
- 剑指offer之面试题13在O(1)时间删除链表结点
- 【剑指Offer】面试题13:在O(1)时间删除链表结点