【剑指offer】以o(1)复杂度删除啊链表的节点,C++实现(链表)
2024-09-07 09:35:30
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 }
最新文章
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
- php数据访问(批量删除)
- [LeetCode] Range Sum Query - Immutable
- Delphi中使用@取函数地址的问题(转)
- hdoj-2019
- WEBrick/Rack Puppet Master
- Java计算日期和时间差
- Custom.pm
- virtenv 0.8.6 发布,虚拟桌面配置工具 - 开源中国社区
- Redis命令与配置
- HTML <;form>;标签
- Handsontable的前端分页与数据库分页
- rest framework 视图,路由
- centos如何安装Python3
- 挖掘两个Integer对象的swap的内幕
- .closest 样例收集
- shell编程(一)
- 【TCP/IP详解 卷一:协议】第十二章 广播和多播
- 新锤子驾到,通通闪开—Service Mesh
- 办公技巧:局域网内设置固定ip
热门文章
- 用数据池来实现socket并发
- 【转】Python爬虫(3)_Beautifulsoup模块
- $《第一行代码:Android》读书笔记——第9章 服务
- vue 数据传递的方法
- 常用模块---sys&;logging&;序列化模块(json&;pickle)
- 二、linux题型
- centos_mysql5.6.21_rpm安装
- tomcat添加登录用户名密码
- java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
- mongod无法启动