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

原创 2015年07月07日 20:41:24

struct ListNode

{

       int  m_nValue;

       ListNode*  m_pNext;

};

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


        并不是一定需要得到被删除的结点的前一个结点,可以将被删除结点的后一个结点的内容复制到被删除结点,然后将后一个结点删除。


void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
{
if (!pListHead || !pToBeDeleted)
return;
if (pToBeDeleted->m_pNext != NULL)
{
ListNode* pNext = pToBeDeleted->m_pNext;
pToBeDeleted->m_nValue = pNext->m_nValue;
pToBeDeleted->m_pNext = pNext->m_pNext;
delete pNext;
pNext = NULL;
}
//链表只有一个结点,删除头结点(也是尾结点)
else if(*pListHead == pToBeDeleted)
{
delete pToBeDeleted;
pToBeDeleted = NULL;
*pListHead = NULL;
}
//要删除的结点是尾结点
else
{
ListNode* pNode = *pListHead;
while (pNode->m_pNext != pToBeDeleted)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = NULL;
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}


上面的解法有一个假设:要删除的结点的确在链表中。需要O(n)的时间才能判断链表中是否包含某一结点,受到O(1)的限制,不得不把确保结点在链表中的责任推给了函数DeleteNode的调用者。


剑指offer--面试题13:在O(1)时间删除链表结点--Java实现

题目描述: 在给定的单向列表的头指针和一个结点指针,定义在一个函数在O(1)时间删除该结点。解题思路: 一般单向列表删除结点,就是从头遍历,找到这个结点之前的结点,指向这个结点之后的结点,就算是删...
  • u012289407
  • u012289407
  • 2015年05月18日 21:57
  • 1237

单向链表在O(1)时间内删除一个节点

单向链表在O(1)时间内删除一个节点
  • Li_Ning_
  • Li_Ning_
  • 2016年06月05日 12:36
  • 2288

LintCode-在O(1)时间复杂度删除链表节点

给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。您在真实的面试中是否遇到过这个题? Yes 样例 给定 1->2-...
  • xiaowei132
  • xiaowei132
  • 2015年08月31日 20:08
  • 829

剑指Offer面试题13(java版):在O(1)时间删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 在单向链表中删除一个节点,最常规的方法无疑是从链表的头结点开始,顺序遍历查找要删除的节点,并在链表中删除该节点。 ...
  • jsqfengbao
  • jsqfengbao
  • 2015年07月31日 20:55
  • 2232

面试题13:在O(1)时间 内删除链表节点

题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数的定义如下: struct ListNode { int value; ListNode*...
  • SmartBrave
  • SmartBrave
  • 2016年06月11日 11:02
  • 1149

【面试题】在O(1)时间复杂度删除链表节点

题目描述给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。样例 给定 1->2->3->4,和节点 3,返回 1->2...
  • zwhlxl
  • zwhlxl
  • 2015年07月28日 15:01
  • 2152

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

删除链表结点,根据结点的位置,和链表结点数量可分三种情况 1.删除非尾结点,链表的结点数量 >= 2 2.删除只有一个结点的链表,结点数量 == 1 3.删除尾结点,结点数量 >= 2 当然,...
  • jun2016425
  • jun2016425
  • 2017年09月17日 11:52
  • 153

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

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{      int        m_nKey;      ListNode*  m...
  • fisher_jiang
  • fisher_jiang
  • 2008年06月02日 10:59
  • 1367

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

#region 在O(1)时间删除指定链表结点 /// /// 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 /// /// ...
  • ywjun0919
  • ywjun0919
  • 2013年08月28日 23:39
  • 857

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

题目描述 在给定单链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下: struct ListNode { int m_nValue; ...
  • yiting52
  • yiting52
  • 2015年08月20日 16:36
  • 155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在O(1)时间删除链表结点
举报原因:
原因补充:

(最多只允许输入30个字)