13--在O(1)时间删除链表结点--待整理

这道题,是基于要删除的节点一定在链表中的背景下操作的。给定头节点,给定目标节点,所以函数可以直接对目标节点以及目标节点的下一节点进行操作,不需要花费O(n)的时间去查找到目标节点了。因此也不用花费O(n)的时间复杂度去定位目标节点以及previous操作了。

代码中,对于尾结点来说,基本的功能代码就不满足了。对于尾结点需要另作考虑,此时对尾结点的操作就是O(n)了。但是计算时间复杂度,发现还是O(1)。

对于删除链表中间节点的题目的思考:按照书中所说,基本功能不应考虑太多。功能么,就是正常情况下,可能会出现的情况。比如,k是中间节点,头结点,尾结点等正常思维情况下应该满足的情况。

特殊输入测试,才是考虑参数特殊的的情况。参数是否为空,参数是否超出范围。在这个题终究是,头结点为空。

对于找到链表结点的误解:原来一直认为,想要找到一个结点,必须从头结点一步一步的找到n结点才行,也就是需要花费O(n)的时间去找到一个结点。
但是,不是的。给定你一个结点,你是可以直接对此节点进行操作的。结点作为参数传入一个函数时,你是可以直接获得这个节点数据,或者修改这个结点指向的。

所以,对于合并两个有序链表的题目,不用每一步都要去从到遍历到新链表末尾,再对处于新链表末尾的结点进行操作。因为上一步已经获得了该节点,那么直接对该节点进行操作就行了。
该题代码也是,直接让新链表的最大结点指向递归函数,而不是从头开始索引。为了验证这个,可以用循环的思想做一下这个题,看看是不是正确的。

LDA要干的事情:根据给定的一篇文档,推测其主题分布。
狄利克雷分布,被称为是分布的分布。

从一个分布中采样,得到的就是一个随机变量X。
从一个分布的分布中采样,得到的就是关于X的分布。然后再从X的分布中采样,才能得到随机变量X。

[图片上传中...(image.png-a4cebe-1532094239303-0)]

你可能感兴趣的:(13--在O(1)时间删除链表结点--待整理)