在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的调用者。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode {       int        m_nKey; ...

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

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; ...

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

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(l)时间删除该结点。链表结点与函数的定义如下: struct ListNode{ int m_nValue; ListNode *m_p...

【剑指offer】面试题13:在O(1)时间删除出链表结点

//题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点。 //链表结点与函数的定义 #include struct ListNode { int m_nValue;...

剑指offer 面试题13:在O(1)时间删除链表结点(C++版)

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

删除链表结点(时间复杂度为O(1)))

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode {       int        m_nKey; ...

剑指offer——在O(1)时间删除链表结点

题目:给定单向链表的头指针和一个指针,定义一个函数在O(1)时间删除该结点 class Node{//创建链表类 String value; Node next; public Node(...

[经典面试题]在O(1)时间删除链表结点

【题目】 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct ListNode {     int        value;     ...

《剑指offer》--- 在O(1)时间内删除链表结点 和 调整数组顺序使得奇数位于偶数前面

《剑指offer》— 在O(1)时间内删除链表结点 和 调整数组顺序使得奇数位于偶数前面

【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】

给定单向链表的头指针和一个结点指针,定义一个函数在0(1)时间删除该结点
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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