查找循环列表入口点。

/ ***链接列表定义。
* structListNode{* intval; * ListNode * next; * ListNode(intx):val(x),next(NULL){}*}; * / classSolution{public:ListNode * detectCycle(ListNode * head){if(head == NULL || head-next == NULL)returnNULL; ListNode * p = head; ListNode * q = head; while(q!
= NULL q-next!
= NULL)//第一个pq符合{p = p-next;q = q?next-next。if(p = = q)break;}if(p = = q){p = head; while(p!
= q)//从起点到起点{p = p-next;}相遇。q = q-next;}return p;}return NULL;
如下图所示,X,Y和Z是链表的初始位置。环的初始位置和放置两个指针的位置将是指针慢速的两倍,具体取决于指针的快速速度。
2 *(a + b)= a + b + n *(b + c)。
a =(n≥1)* b + n * c =(n≥1)(b + c)+ c。
b + c恰好是环的长度,因此可以挤出。例如,双手分别放置在初始位置和会合位置,并以相同的速度移动。当指向一个指针的距离结束时,另一个指针是正确的,因此请确保将c添加到循环n-1的圆圈中。
因此,双手在戒指的开头相遇。


上一篇:我希望引入风。
下一篇:没有了

新闻排行

精华导读