在采访中,链接列表通常是一个简单的问题。尽管问题并不困难,但面试官经常由于疏忽而获得细节,导致在短时间内无法无漏洞。
今天,我总结了链接列表的共同知识点。放弃该集合,遵循公共帐户[程序员注释],在访谈前阅读,然后快速清除链式表类型。
不管链接列表中是否有奇数数字,甚至几个节点,慢速的两个指针都可以从头开始。或接下来,慢速指向中间节点。
在周期结束后,请参见下图。
继续向后移动两个相邻的指针,并转动两个指针之间的相邻关系。在保存之前,请注意帖子-Pointer的下一个节点,并最终将原始头放在null旁边。
如下图所示,红色代表第一步,蓝色代表第二步。
给定两个链接列表,依次请求其中一个节点,然后合并两个链接列表。
下图是一个常见的组合想法。这个想法不仅适合选择节点合并,还适用于将两个有序链接的列表合并到有序的链接列表中。
首先,将一个虚拟的头节点确定为合并后链接列表的虚拟头节点,链接列表的最后一个节点指向带有尾指针的合并链。east循环连接到heada,heada已连接到头b。,然后将尾巴更新为头脑。
在下图中,红线代表周期的第一轮,蓝线代表周期的第二轮。
主题:链接列表头的头节点,请根据促销令进行排列,然后返回分类的链接列表。
链接列表的特征导致任何两个位置的节点无法轻易交换,因此他们不能使用快速的排序算法。
合并和排序非常适合链接列表排序。将底部到底部的重新计算,两个链接的列表结合在子连接列表之后的长度2中,长度为1;
实施过程在上述基本操作中使用“快速和缓慢的可怜的中介”将链接列表分为两个;使用“组合链接列表”将分类的子链接列表合并到有序的长链接列表中。
1.给您一个头节点节点给您,确定链接列表中是否有戒指?
这个问题相对简单,可以使用快速缓慢的指针。慢速指针一次一次步骤,一次一次步骤。如果快速指针在结束前相遇,请与慢速指针相遇。如果您没有见面,就没有戒指。
2.如果链接列表具有戒指,则是环的起点。
这是上一个问题的后续,首先清除符号的含义:
X:头节与红点之间的长度;
Y:进入红点之间的长度红点;
M:红点与入口红点之间的长度;
R:环的整个长度;
t:t在聚会点的聚会点开会。
假设快速缓慢指针的相遇点会在环上相遇。
快速指针之间的距离是慢速指针之间的距离的两倍,有两个相等的形式:
2t = x + n* r + y(快速指针);
t = x + y(慢速指针)
您可以得到x = n*r -y;启动x = m +(n-)*R.解释相遇后,慢速指针将被放回起点。在快速指针一次仅需一步之后,两个指针再次相遇的点是入口点。
原始:https://juejin.cn/post/7100198006347005966