【算法提高】链表专题题解汇总
简单
(待补充)
中等
复制带随机指针的链表
Leetcode No.138 复制带随机指针的链表
执行用时:16ms 打败85%
理解题意:深拷贝什么意思?
复制一个结点head,若通过语句Node dup = head
,这样就是浅拷贝,只是复制了一个引用变量dup,两个引用变量dup和head指向同一个结点对象。
深拷贝则是复制出一个完全一样的独立的结点对象,深拷贝一个结点head,则必须创建另一个完全一样的独立的新结点对象dup,且head的next和random指向的结点也需要深拷贝到dup的next和random上。
即,若原链表有n个结点,则深拷贝得到的链表有且仅有n个对应的独立的结点副本。
我们使用迭代的方法,思路如下:
- 遍历原链表的每个结点,对每个结点进行深拷贝。
- 第一次遍历把每个结点的副本对象创建出来,并把next引用变量设置好。同时把已创建好的结点用哈希表记录,防止重复创建。
- 第二次遍历把random引用变量设置好即可完成深拷贝。
代码如下:
1 | class Solution { |
环形链表II
Leetcode No.142 环形链表II
执行用时:20ms 打败16%
我看一些时间复杂度中等的方法用的是快慢指针的办法,包括之前写的其实也是快慢指针,不过没有完成。然后昨天做了第138题,打开了哈希表新思路,不过时间复杂度比较差,代码是很简短的。
思路如下:
- 如果链表中存在回路,那么这个节点一定已经事先存储在了哈希表的内部了。
- 因此,在遍历链表内元素的时候,依次判断该节点是否加入了哈希表。没有的话就加入,没有话就直接返回该节点。
1 | class Solution { |
困难
(待补充)
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.