0.简介

      本文是牛客网《剑指offer》刷题笔记。

1.题目

      在O(1)时间内删除链表节点。

2.思路

        前提条件:删除的节点在链表上;边界条件:链表不为空和节点不为空;删除非尾节点i:删除节点i的下一个节点j的内容复制到节点i,然后节点i的指针指向节点j的下一个节点,删除节点j;删除尾节点i:顺序遍历得到被删节点的前序节点,然后删除被删除节点,前序节点指向nullptr。

3.code

  1 void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
2 {
3 if(!pListHead || !pToBeDeleted)
4 return;
5
6 // 要删除的结点不是尾结点
7 if(pToBeDeleted->m_pNext != nullptr)
8 {
9 ListNode* pNext = pToBeDeleted->m_pNext;
10 pToBeDeleted->m_nValue = pNext->m_nValue;
11 pToBeDeleted->m_pNext = pNext->m_pNext;
12
13 delete pNext;
14 pNext = nullptr;
15 }
16 // 链表只有一个结点,删除头结点(也是尾结点)
17 else if(*pListHead == pToBeDeleted)
18 {
19 delete pToBeDeleted;
20 pToBeDeleted = nullptr;
21 *pListHead = nullptr;
22 }
23 // 链表中有多个结点,删除尾结点
24 else
25 {
26 ListNode* pNode = *pListHead;
27 while(pNode->m_pNext != pToBeDeleted)
28 {
29 pNode = pNode->m_pNext;
30 }
31
32 pNode->m_pNext = nullptr;
33 delete pToBeDeleted;
34 pToBeDeleted = nullptr;
35 }
36 }

最新文章

  1. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
  2. php数据访问(批量删除)
  3. [LeetCode] Range Sum Query - Immutable
  4. Delphi中使用@取函数地址的问题(转)
  5. hdoj-2019
  6. WEBrick/Rack Puppet Master
  7. Java计算日期和时间差
  8. Custom.pm
  9. virtenv 0.8.6 发布,虚拟桌面配置工具 - 开源中国社区
  10. Redis命令与配置
  11. HTML <form>标签
  12. Handsontable的前端分页与数据库分页
  13. rest framework 视图,路由
  14. centos如何安装Python3
  15. 挖掘两个Integer对象的swap的内幕
  16. .closest 样例收集
  17. shell编程(一)
  18. 【TCP/IP详解 卷一:协议】第十二章 广播和多播
  19. 新锤子驾到,通通闪开—Service Mesh
  20. 办公技巧:局域网内设置固定ip

热门文章

  1. 用数据池来实现socket并发
  2. 【转】Python爬虫(3)_Beautifulsoup模块
  3. $《第一行代码:Android》读书笔记——第9章 服务
  4. vue 数据传递的方法
  5. 常用模块---sys&logging&序列化模块(json&pickle)
  6. 二、linux题型
  7. centos_mysql5.6.21_rpm安装
  8. tomcat添加登录用户名密码
  9. java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
  10. mongod无法启动