当前位置:网站首页>Double pointeur de liste liée (pointeur rapide et lent, pointeur séquentiel, pointeur de tête et de queue)
Double pointeur de liste liée (pointeur rapide et lent, pointeur séquentiel, pointeur de tête et de queue)
2022-07-05 22:28:00 【Codestars codestars】
141. Linked List Cycle](https://leetcode.cn/problems/linked-list-cycle/)
Given head, the head of a linked list, determine if the linked list has a cycle in it.
There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail’s next pointer is connected to. Note that pos is not passed as a parameter.
Return true if there is a cycle in the linked list. Otherwise, return false.
C'est le problème typique de l'anneau de liste , L'approche du problème de l'anneau de liste est un pointeur rapide et lent .
Les pointeurs rapides et lents ne doivent pas être mal compris , Les pointeurs rapides et lents ne sont pas des pointeurs avant et arrière , Les pointeurs rapides et lents signifient une marche rapide , Une marche lente , Comme marcher un pas à la fois ,Deux pas chacun..
Dans ce cas, Si un anneau apparaît , Alors, deux pas (Devant), Je suis sûr qu'un pas dans le ring ( Marche derrière ), Je veux courir sur le terrain de jeu , Celui qui court vite dépassera toujours celui qui court lentement .
Alors réglez deux pointeurs rapides et lents , Voir si vous vous rencontrerez peut déterminer si c'est un anneau .
public boolean hasCycle(ListNode head) {
if(head==null)return false;
ListNode slowNode=head;
ListNode fastNode=head;
while(fastNode!=null&&fastNode.next!=null){
// En fait, ça doit être écrit sur la base de la compréhension , Parce que si c'est sans anneau ,AlorsfastDeux pas à la fois, Il est possible de marcher jusqu'à la distance nullPour deux pas, Ou peut - être à distance null Pour une étape ,C'est tout.while Ça doit être écrit comme ça
slowNode=slowNode.next;
fastNode=fastNode.next.next;
if(slowNode==fastNode)return true;
}
return false;
}
876. Middle of the Linked List
class Solution {
public ListNode middleNode(ListNode head) {
if(head==null)return null;
ListNode slow=head;
ListNode fast=head;
while(fast.next!=null&&fast.next.next!=null){
fast=fast.next.next;
slow=slow.next;
}
if(fast.next==null)return slow;
if(fast.next.next==null)return slow.next;
return head;
// Le principe de cette question est
Avec un pointeur rapide et lent,Le pointeur rapide marche deux pas à la fois,Le pointeur lent fait un pas à la fois, Donc le pointeur rapide marche deux fois plus loin que le pointeur lent ,
Donc quand le pointeur rapide traverse la fin de la liste , Pointeur lent pointant vers le noeud intermédiaire (De la solution de la boucle de force)
}
Au début, j'ai comparé cette question à Le pointeur de vitesse ci - dessus est confus .
Ce problème devrait être appelé pointeur séquentiel plus précis , Laissez un pointeur aller en premier , Arrêtez - vous quand certaines conditions sont remplies . Et puis deux autres pointeurs ensemble .
Similaire Et cette question
L'idée est exactement la même
L'autre est une version améliorée de la liste de liens en boucle ci - dessus , Il ne suffit pas de trouver si la liste a des anneaux , Et trouver le point de départ de l'anneau .
L'idée est de trouver d'abord où les pointeurs rapides et lents se rencontrent , Ensuite, placez un noeud au point de rencontre et au début de la chaîne ,On y va ensemble., Où les deux noeuds se rencontrent
C'est le point de départ de l'anneau . Pour plus de détails, voir La solution à l'enregistrement aléatoire de code
Les codes sont les suivants::
public class Solution {
public ListNode detectCycle(ListNode head) {
if(head==null)return null;
ListNode result=head;
ListNode slow=head;
ListNode fast=head;
int count=0;
while(fast.next!=null&&fast.next.next!=null){
slow=slow.next;
fast=fast.next.next;
if(slow==fast) break;
}
if(fast.next==null||fast.next.next==null) return null;
while(result!=slow){
result=result.next;
slow=slow.next;
}
return result;
}
}
边栏推荐
- 请求二进制数据和base64格式数据的预览显示
- Distance entre les points et les lignes
- How to reverse a string fromCharCode? - How to reverse String. fromCharCode?
- Solutions for unexplained downtime of MySQL services
- [agc009e] eternal average - conclusion, DP
- Sub total of Pico development
- 2022软件测试工程师涨薪攻略,3年如何达到30K
- [error record] file search strategy in groovy project (src/main/groovy/script.groovy needs to be used in the main function | groovy script directly uses the relative path of code)
- opencv 判断点在多边形内外
- Post-90s tester: "after joining Ali, this time, I decided not to change jobs."
猜你喜欢
Solutions for unexplained downtime of MySQL services
Cobaltstrike builds an intranet tunnel
Distance from point to line intersection and included angle of line
Pl/sql basic syntax
700. Search in a Binary Search Tree. Sol
EasyCVR集群部署如何解决项目中的海量视频接入与大并发需求?
Livelocks and deadlocks of concurrency control
How to quickly experience oneos
Matlab draws a cute fat doll
Qtquick3d real time reflection
随机推荐
[groovy] mop meta object protocol and meta programming (Introduction to groovyobject interface | introduction to metaclass | implementation of class methods using groovyobject invokemethod)
What about data leakage? " Watson k'7 moves to eliminate security threats
Understand the basic concept of datastore in Android kotlin and why SharedPreferences should be stopped in Android
The simple problem of leetcode is to split a string into several groups of length K
Sparse array [matrix]
Nacos installation and service registration
科技云报道:算力网络,还需跨越几道坎?
The countdown to the launch of metaverse ape is hot
Hcip day 16
QT creator 7 beta release
CA certificate trampled pit
Overriding equals() & hashCode() in sub classes … considering super fields
Wonderful review of the digital Expo | highlight scientific research strength, and Zhongchuang computing power won the digital influence enterprise award
2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O(N*logN),额外空间复杂度O(N*
Common interview questions of JVM manufacturers
实战:fabric 用户证书吊销操作流程
Database tuning solution
U盘的文件无法删除文件怎么办?Win11无法删除U盘文件解决教程
请求二进制数据和base64格式数据的预览显示
1.3 years of work experience, double non naked resignation agency face-to-face experience [already employed]