剑指offer:在O(1)时间删除链表结点(java)
来源:互联网 发布:考辛斯数据 编辑:程序博客网 时间:2024/06/17 22:51
题目描述:
给定一个单向链表的头指针和一个结点指针,实现一个函数在o(1)时间删除该结点。
在单向链表中删除一个结点,最常规的做法无疑是从链表的头结点开始,顺序遍历查找要删除的结点,并在链表中删除该结点。
那是不是一定需要得到被删除的结点的前一个结点呢?答案是否定的,我们可以很方便得到要删除结点的下一个结点。我们把下一个结点内容复制到要删除的结点上覆盖原有的内容,再把下一个结点删除。
但如果要删除的结点位于尾部,那么只能按常规做法,并且当链表只有一个结点,我们要删除头结点(也是尾结点)时,需要在删除结点后,将链表头结点置为NULL。
public static void DeleteNode(Node<int> headNode, Node<int> deleteNode) { if (headNode == null || deleteNode == null) { return; } if (deleteNode.Next != null) // 链表有多个节点,要删除的不是尾节点:O(1)时间 { Node<int> tempNode = deleteNode.Next; deleteNode.Item = tempNode.Item; deleteNode.Next = tempNode.Next; tempNode = null; } else if (headNode == deleteNode) // 链表只有一个结点,删除头结点(也是尾结点):O(1)时间 { deleteNode = null; headNode = null; } else // 链表有多个节点,要删除的是尾节点:O(n)时间 { Node<int> tempNode = headNode; while(tempNode.Next != deleteNode) { tempNode = tempNode.Next; } tempNode.Next = null; deleteNode = null; } }
0 0
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指offer:在O(1)时间删除链表结点(java)
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 《剑指offer》:[2]O(1)时间删除链表结点
- 【剑指offer】O(1)时间删除链表结点
- 剑指offer(4)-O(1)时间删除链表结点
- 剑指offer--o(1)时间删除链表结点
- 【剑指offer】链表相关-在o(1)时间删除链表结点13
- 剑指offer—在O(1)时间删除链表结点(18-1)
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 剑指offer(33)-在O(1)时间删除链表结点[数据结构]
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指offer 3.3 代码的完整性3- 在O(1)时间删除链表结点
- 《剑指Offer》面试题13:在O(1)时间删除链表结点
- 剑指Offer之 - 在O(1)时间删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- 《剑指Offer》学习笔记--面试题13:在O(1)时间删除链表结点
- 《剑指Offer》面试题:在 O(1)时间删除链表结点
- HashMap排序
- 图片轮播(bootstrap)与 圆角搜索框(纯css)
- JSP指令
- 一篇很全面的freemarker教程
- iOS开发中对于数据缓存路径的讲解
- 剑指offer:在O(1)时间删除链表结点(java)
- 澳大利亚人口普查遭DDoS攻击,IBM失职受批
- Mybatis批量插入
- PowerDesigner如何快速查找数据库表的英文表名?
- Maven配置SSM(Spring SpringMVC Mybatis)框架 细到极致!一秒看懂
- 单片机==独立按键+蜂鸣器(10)
- iOS-音频处理
- Mysql mysql lost connection to server during query 问题解决方法
- Android Support兼容包详解