LintCode Delete Node in the Middle of Singly Linked List 在O(1)时间复杂度删除链表节点
来源:互联网 发布:蘑菇战争2 数据 编辑:程序博客网 时间:2024/04/29 11:53
中文描述:
给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。
样例
给定 1->2->3->4,和节点 3,返回 1->2->4。
English Version:
Implement an algorithm to delete a node in the middle of a singly linked list, given only access to that node.
Example
Given 1->2->3->4, and node 3. return 1->2->4
以下内容转自http://www.cnblogs.com/bakari/p/4013812.html
这是一道广为流传的Google面试题,考察我们对链表的操作和时间复杂度的了解,咋一看这道题还想不出什么较好的解法,但人家把题出在这,肯定是有解法的。一般单链表删除某个节点,需要知道删除节点的前一个节点,则需要O(n)的遍历时间,显然常规思路是不行的。在仔细看题目,换一种思路,既然不能在O(1)得到删除节点的前一个元素,但我们可以轻松得到后一个元素,这样,我们何不把后一个元素赋值给待删除节点,这样也就相当于是删除了当前元素。可见,该方法可行,但如果待删除节点为最后一个节点,则不能按照以上思路,没有办法,只能按照常规方法遍历,时间复杂度为O(n),是不是不符合题目要求呢?可能很多人在这就会怀疑自己的思考,从而放弃这种思路,最后可能放弃这道题,这就是这道面试题有意思的地方,虽看简单,但是考察了大家的分析判断能力,是否拥有强大的心理,充分自信。其实我们分析一下,仍然是满足题目要求的,如果删除节点为前面的n-1个节点,则时间复杂度为O(1),只有删除节点为最后一个时,时间复杂度才为O(n),所以平均的时间复杂度为:(O(1) * (n-1) + O(n))/n = O(1);仍然为O(1).
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param node: the node in the list should be deleted * @return: nothing */ public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; }}
- LintCode Delete Node in the Middle of Singly Linked List 在O(1)时间复杂度删除链表节点
- 372.Delete Node in the Middle of Singly Linked List-在O(1)时间复杂度删除链表节点(容易题)
- LinkedList---Delete Node in the Middle of Singly Linked List
- #372 Delete Node in the Middle of Singly Linked List
- Delete Node in the Middle of Singly Linked List
- LintCode 372: Delete Node in the Middle of Singly Linked List
- 237. Delete Node in a Linked List&在O(1)时间删除链表结点
- LintCode-在O(1)时间复杂度删除链表节点
- lintcode 在O(1)时间复杂度删除链表节点
- LintCode:在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点-LintCode
- LintCode-在O(1)时间复杂度删除链表节点
- Lintcode 在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点 -LintCode
- 【11】Delete a node in the middle of a single linked list
- [CrackCode] 2.3 Delete a node in the middle of a single linked list
- Asp中JSON的使用
- 正则表达式集合
- UISegmentedControl 的使用
- 【零基础学习iOS开发】【02-C语言】10-函数
- Go语言简介
- LintCode Delete Node in the Middle of Singly Linked List 在O(1)时间复杂度删除链表节点
- Magento通过分类id获取该分类下的产品(entity_id、type_id、sku、created_at、updated_at、status、visibility)
- 二级指针
- 【零基础学习iOS开发】【02-C语言】09-流程控制
- Tcpclient简单聊天程序
- caffe study(3) 关于激活函数以及loss function
- anroid在Mac下的反编译工具配置
- 解读Android之Service(1)基础知识
- HTTP头信息解读