剑指offer(14):在O(1)时间删除链表节点
来源:互联网 发布:侠盗飞车5mac版 编辑:程序博客网 时间:2024/06/08 09:55
题目描述:
给定单向链表的头指针head和一个节点指针p,定义一个函数在
分析:
在单向链表中删除一个节点,最常规的是从链表的头结点开始遍历,找到需要删除的节点并删除,平均时间复杂度为
推荐解法:
根据需要删除的节点指针p,可以找到p的下一个节点q,将q的值赋值给p后再将p的指针指向q,即用q覆盖p,则达到删除的目的。
如果链表中只有一个节点,在删除该节点后需要把链表的头结点置为null。如果需要删除的是尾节点,即p的下一个节点q为null,则还是需要顺序遍历链表,找到p的前序节点进行删除操作。对于n-1个非尾节点,
代码:
/** * 平均时间复杂度为O(1),删除链表节点 * @param head 头结点 * @param nodeToBeDeleted 待删除节点 */ public void deleteNode(ListNode head, ListNode nodeToBeDeleted) { if(head == null || nodeToBeDeleted == null) return; // 要删除的节点不是尾节点 O(1) if (nodeToBeDeleted.next != null) { nodeToBeDeleted.val = nodeToBeDeleted.next.val; nodeToBeDeleted.next = nodeToBeDeleted.next.next; } else if(head == nodeToBeDeleted) { // 要删除头节点,而且链表只有一个节点 O(1) nodeToBeDeleted = null; head = null; } else { ListNode tmp = head; // 要删除尾节点,而且链表有多个节点 O(n) while (tmp.next != nodeToBeDeleted) { tmp = tmp.next; } tmp.next = null; nodeToBeDeleted = null; } }
参考
1. 何海涛,剑指offer名企面试官精讲典型编程题(纪念版),电子工业出版社
0 0
- 剑指offer(14):在O(1)时间删除链表节点
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- 剑指offer 13. 在O(1)时间删除链表节点
- 剑指Offer算法实现之十三:在O(1)时间删除链表节点
- 剑指offer 面试题12 在O(1)时间删除链表节点
- 剑指Offer :面试题13 在O(1)时间删除链表节点
- 剑指offer 面试题13—在O(1)时间删除链表节点
- 剑指offer之在O(1)时间删除链表节点
- 剑指offer面试题13-在O(1)时间删除链表的节点
- LintCode-剑指Offer-(372)在O(1)时间复杂度删除链表节点
- 【剑指offer系列】 在O(1)时间删除链表节点___13
- 剑指offer-面试题13.在O(1)时间删除链表节点
- 剑指offer之面试题13:在O(1)时间删除链表节点
- 剑指offer系列-T13在O(1)时间删除链表节点
- 剑指offer--面试题13:在O(1)时间删除链表节点
- 剑指offer-面试题13-在O(1)时间删除链表节点
- 剑指offer面试题13 在O(1)时间删除链表节点
- 两个小数相加
- Eclipse neon M6 java.lang.RuntimeException: Application "org.eclipse.ui.ide.workbench"
- UART和RS232/RS485的关系是什么?
- 腾讯技术运营一面
- STS或eclipse安装SVN插件
- 剑指offer(14):在O(1)时间删除链表节点
- 一夜爆红的程序员神助,竟然是它!
- qt的addWidget、setColumnStretch 等的使用方法
- 剑指offer 数组中出现次数超过一半的数字
- java金额类计算封装
- HTML学习笔记
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 马踏棋盘的问题
- gulp详细入门教程
- BI Automation Framework