首页 > 代码库 > 在O(1)的时间删除链表结点
在O(1)的时间删除链表结点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除节点。链表结点与函数的定义如下:
struct ListNode { int m_nValue; ListNode* m_pNext; }; void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted);
分析:要删除结点i,先把i的下一个节点j的内容复制给i,然后把i的指针指向结点j的下一个结点。此时再删除结点j,其效果相当于把结点i删除了。
上述思路有几个小问题:1.如果要删除的结点位于链表的尾部,那么就没有下一个节点,我们只能从头遍历链表并完成删除。2.如果链表中只有一个节点,而我们又要删除链表的头结点,此时我们在删除结点之后还要把链表的投结点置NULL。下面是实现代码:
void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted) { if(!pListHead||!pToBeDeleted) return; if(pToBeDeleted->m_pNext!=NULL) { ListNode* pNext=pToBeDeleted->m_pNext; pToBeDeleted->m_nValue=http://www.mamicode.com/pNext->m_nValue;>
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1582956
在O(1)的时间删除链表结点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。