【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
struct ListNode
{int val;ListNode* next;
};
void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted);
一般情况下,我们需要从头开始查找(时间复杂度为 O(n)O(n)),找到被删除节点的前一个结点。正如题目所言,是否一定需要得到被删除节点的前一个结点呢?答案是否定。我们可以找到一种等价做法,如果我们把下一个节点的内容(无非是 val 和指向下一个元素的指针)覆盖自身的内容,再把下一个结点删除。
这里需要注意两个问题,如果被删除的节点位于链表的尾部,那么他就没有下一个结点(next == NULL),此时值得从节点开始遍历,找到倒数第二个节点。
如果链表只有一个节点,而我们又要删除链表的头结点(也是尾节点),需要将链表的头结点置为 NULL。
void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
{if (!pListHead || !pToBeDeleted)return;if (pToBeDeleted->next != NULL){ListNode* pNext = pToBeDeleted->next;pToBeDeleted->val = pNext->val;pToBeDeleted->next = pNext->next;delete pNext;pNext = NULL;}else if (*pListHead == pToBeDeleted){delete pToBeDeleted;pToBeDeleted = NULL;*pListHead = NULL;}else{ListNode* pNode = *pListHead;while (pNode->next != pToBeDeleted)pNode = pNode->next;pNode->next = NULL;delete pToBeDeleted;pToBeDeleted = NULL;}
}
【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点相关推荐
- 【剑指offer-Java版】13O(1)时间删除链表结点
O(1)时间删除链表结点 前提是调用者知道要删除的结点的指针,而不是要删除结点的值 不过此类删除问题,当然是存在各种边界条件了: 1) 链表中只有一个结点 - 删除唯一的一个 2) 要删除的结点是最后 ...
- 【剑指offer】面试题18:删除链表的节点(Java)
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 输出 ...
- 《剑指offer》第十八题(在O(1)时间删除链表结点)
// 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点. #include <iostream> ...
- [剑指offer]面试题13:在O(1)时间删除链表结点
面试题13:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点.链表结点与函数的定义如下: struct ListNode {int valu ...
- 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java
<LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...
- 剑指Offer:合并两个排序的链表【25】
剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...
- LeetCode Algorithm 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 Ideas 这题让我想到了归并排序: 划分问题:把序列分成元素个数尽量相等的两半: 递归求解:把两半元素分别排序: 合并问题:把两个有序表合并成一个. 捞 ...
- 【LeetCode】剑指 Offer 25. 合并两个排序的链表
[LeetCode]剑指 Offer 25. 合并两个排序的链表 文章目录 [LeetCode]剑指 Offer 25. 合并两个排序的链表 一.递归 二.伪头节点 总结 一.递归 思路: 如果有一个 ...
- 剑指offer——面试题37:两个链表的第一个公共结点
剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...
- 剑指offer系列——剑指 Offer 25. 合并两个排序的链表
⭐️前面的话⭐️ 大家好!本篇文章将介绍关于数据结构之链表的OJ题,来自力扣:21. 合并两个有序链表 或 剑指 Offer 25. 合并两个排序的链表 题解,展示代码语言暂时为:Java语言与C语言 ...
最新文章
- Mysql 查看连接数,状态 最大并发数 怎么设置才合理
- cocos2d-x游戏实例(21)-纵版射击游戏(8)
- java单个变量的表达式_java中使用Lambda表达式的5种语法
- 相对定向绝对定向 MFC 实现 CSU摄影测量学
- 学生寝室管理系统-C语言版
- 如何在word中输入带对号的方框
- 03_Snaker流程demo
- app端分页 简单的分页 java
- 【这不是经验】VS编译器初始化报错
- 直播出新规 这些行为会被限制参加活动
- Java使用Spire.Doc实现Word文档添加图片水印
- C# 之 Math取整数
- py.切片(slice)
- 记几个智能手表相关芯片 蓝牙芯片 低功耗
- web3.0的基石BYDK,带来革命性的新玩法,腾飞在即
- Unity中文离线文档以及提升访问速度
- 信息学奥赛一本通高手训练题解目录
- 通过$route.mete.show实现组件动态展示
- 【越狱开发】《我叫MT online》开源辅助工具
- RIS远程操作系统安装服务