/*
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
*/
/*
思路:
将要删除的节点的下一个节点的value和next复制过来,删除下一个节点。
考虑两种特殊情况:
节点为尾结点,则需要从头遍历。
节点既是尾结点也是头结点,需要将头节点指向的内容置为空。
*/
struct ListNode{
int value;
ListNode* next;
}; void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){
if(!pListHead || !pToBeDeleted){
throw("invalid parameters");
}
//要删除的节点既是头结点,又是尾结点
if(*pListHead== pToBeDeleted && !pToBeDeleted->next){
*pListHead = nullptr;
delete pToBeDeleted;
pToBeDeleted = nullptr;
}else if(!pToBeDeleted->next){//要删除的节点是尾结点if ListNode* pNode = *pListHead;
while(!pNode->next->next){
pNode = pNode->next;
}
pNode->next = nullptr;
delete pToBeDeleted;
pToBeDeleted = nullptr;
}else{
ListNode *nextNode = pToBeDeleted->next;
pToBeDeleted->value = nextNode->value;
pToBeDeleted->next = nextNode->next;
delete nextNode;
nextNode = nullptr;
} }

  

最新文章

  1. 【xcode5的使用】
  2. 如何成为python高手
  3. 利用Canvas编辑图片
  4. PHPCMS几个有用的全局函数
  5. JavaScript的引擎机制
  6. Hadoop学习篇1 快速入门
  7. c++ <string.h>中包括哪些常用函数
  8. iOS:crash崩溃日志分析
  9. dx中纹理相关的接口备注
  10. js实现对比百分比
  11. GFF format
  12. MSP430F149学习之路——比较器Comparaor_A
  13. zoj 3365
  14. find the safest road--hdu1596
  15. android:layout_gravity和android:gravity属性的区别1
  16. Spark ML源码分析之二 从单机到分布式
  17. 识别拖动与点击操作之zepto的bug
  18. qt 画多边形(实现鼠标拖动节点)
  19. listview添加数据
  20. 基于vue框架手写一个notify插件,实现通知功能

热门文章

  1. 关于求最长子串,使得最大减最小小于k的问题-以POJ4003为例
  2. codeforces 922 B. Magic Forest(枚举、位运算(异或))
  3. PHP第三方登录——QQ登录
  4. JFrame的getContentPane
  5. Python3(十) 函数式编程: 匿名函数、高阶函数、装饰器
  6. MySQL8.0 InnoDB并行执行
  7. python随用随学20200118-函数的高级特性
  8. transient关键字和serialVersionUID
  9. 实用,Windows后台守护进程iNeuDaemon发布。Linux操作系统下使用使用supervisor
  10. kubernetes监控