日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Linked List Cycle

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linked List Cycle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Given a linked list, determine if it has a cycle in it.


Have you met this question in a real interview??YesExample

Given -21->10->4->5, tail connects to node index 1, return true

Challenge?

Follow up:
Can you solve it without using extra space?

來源:?http://www.lintcode.com/en/problem/linked-list-cycle/

分析


使用快慢指針


1234567891011121314151617181920212223242526272829/**?*?Definition?for?ListNode.?*?public?class?ListNode?{?*?????int?val;?*?????ListNode?next;?*?????ListNode(int?val)?{?*?????????this.val?=?val;?*?????????this.next?=?null;?*?????}?*?}?*/?public?class?Solution?{????/**?????*?@param?head:?The?first?node?of?linked?list.?????*?@return:?True?if?it?has?a?cycle,?or?false?????*/????public?boolean?hasCycle(ListNode?head)?{??????????//?write?your?code?here????????ListNode?slow?=?head,?fast?=?head;????????while(fast?!=?null?&&?fast.next?!=?null?&&?fast.next.next?!=?null){????????????slow?=?slow.next;????????????fast?=?fast.next.next;????????????if(slow?==?fast){????????????????return?true;????????????}????????}????????return?false;????}}

1.判斷單鏈表是否有環

  使用兩個slow, fast指針從頭開始掃描鏈表。指針slow 每次走1步,指針fast每次走2步。如果存在環,則指針slow、fast會相遇;如果不存在環,指針fast遇到NULL退出。

  就是所謂的追擊相遇問題: 相遇時,slow 并沒有走完一圈,fast領先slow一圈,第一次相遇在Pos處

    

2.求有環單鏈表的環長

?  在環上相遇后,記錄第一次相遇點為Pos,之后指針slow繼續每次走1步,fast每次走2步。在下次相遇的時候fast比slow正好又多走了一圈,也就是多走的距離等于環長。

  設從第一次相遇到第二次相遇,設slow走了len步,則fast走了2*len步,相遇時多走了一圈:?

    環長=2*len-len。?

3.求有環單鏈表的環連接點位置

  第一次碰撞點Pos到連接點Join的距離 = 頭指針到連接點Join的距離,因此,分別從第一次碰撞點Pos、頭指針head開始走,相遇的那個點就是連接點。

?    

  在環上相遇后,記錄第一次相遇點為Pos,連接點為Join,假設頭結點到連接點的長度為LenA,連接點到第一次相遇點的長度為x,環長為R

    第一次相遇時,slow走的長度 S =?LenA?+?x;

    第一次相遇時,fast走的長度 2S =?LenA?+ n*R?+?x;

    所以可以知道,LenA?+?x =??n*R;  LenA = n*R -x; ?亦可以看成 LenA = m*R + y

4.求有環單鏈表的鏈表長

?  上述2中求出了環的長度;3中求出了連接點的位置,就可以求出頭結點到連接點的長度。兩者相加就是鏈表的長度。

來源:?http://www.cnblogs.com/xudong-bupt/p/3667729.html



null

轉載于:https://www.cnblogs.com/zhxshseu/p/f8973e488b1e794e4312d1915ba90381.html

總結

以上是生活随笔為你收集整理的Linked List Cycle的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。