剑指Offer——在O(1)时间内删除表节点
来源:互联网 发布:知而行 编辑:程序博客网 时间:2024/06/06 21:17
题目描述:
给定单向列表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。
解题思路:
一般单向链表删除节点,就是从头遍历,找到这个节点,指向这个节点之后的节点,就算是删除了这个节点。
这种算法的复杂度为O(n)。
题目要求在O(1)时间内完成,所以应该避免遍历。
我们遍历的目的是为了找到这个节点前面的那个节点,所以我们可以采用下面的方法。
将待删除节点的下一个节点的值赋给待删除的节点,然后删除一个节点,就达到了删除节点的目的。
找到合适的算法后,还有几种情况需要考虑:
1)正常,多个节点,删除的不是尾节点。
2)只有一个节点,删除尾节点(也是头节点)。
3)有多个节点,删除尾节点。
代码如下:
class ListNode {int data;ListNode next;}public class DeleteNode {public ListNode deleteNode(ListNode head, ListNode deListNode) {if(deListNode == null || head == null)return null;if(deListNode.next != null) {//不是尾节点ListNode node = deListNode.next;deListNode.data = node.data;deListNode.next = node.next;node = null;} else if(head == deListNode) {//只有一个节点,删除头节点deListNode = null;head = null;return null} else {//多个节点,删除尾节点ListNode pointListNode = head;//从头结点开始while(pointListNode.next != deListNode)pointListNode = pointListNode.next;pointListNode.next = null;deListNode = null;}return head;}}
阅读全文
0 0
- 剑指Offer——在O(1)时间内删除表节点
- 剑指offer 13--在O(1)时间内删除链表节点
- 剑指offer--在O(1)时间内删除链表结点
- 在O(1)时间内删除链表节点
- 在O(1)时间内删除链表节点
- 在O(1)时间内删除链表节点
- 单向链表在O(1)时间内删除一个节点
- 13 在O(1)时间内删除链表节点
- 在O(1)时间内删除链表节点
- 剑指offer 面试题13—在O(1)时间删除链表节点
- 第二十八题 在O(1)时间内删除指定节点
- 每天一道算法题(4)——O(1)时间内删除链表节点
- 《剑指offer》--- 在O(1)时间内删除链表结点 和 调整数组顺序使得奇数位于偶数前面
- 【谷歌面试题】在O(1)时间内删除链表节点
- 在O(1)的时间内删除链表的一个节点
- 【谷歌面试题】在O(1)时间内删除链表节点
- 微软之33 在O(1)的时间内删除链表的节点
- 【谷歌面试题】在O(1)时间内删除链表节点
- 精通比特币-第3章 比特币客户端
- 野指针的定义和避免
- 精通比特币-第4章 密钥、地址、钱包
- 精通比特币-第5章 交易
- 什么是二倍图?什么是三倍图?
- 剑指Offer——在O(1)时间内删除表节点
- DAY-2
- Raspberry Pi: WiFi设置
- Android_Activity_跳转Activity至其他,再返回接受其activity返回的值。
- android:ToolBar详解(手把手教程)
- [4] Linux磁盘管理
- 数谜
- 利用记录型信号量机制: wait(s), signal(s)解决进程同步问题
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)