2015-12-30 81 views
1

我的代碼需要在鏈接列表中查找循環。如果有一個週期,那麼輸出是1;否則結果爲0。我已經完成了研究並瞭解了弗洛伊德的循環算法,並發現了其他幾個包含該算法代碼的帖子。但是我在HackerRank上的一些測試用例上失敗了。請問請告訴我代碼有什麼問題?謝謝!鏈接列表中的循環

int HasCycle(Node head) { 
    if(head == null){ 
     return 0; 
    } 
    Node slow = head; 
    Node fast = head; 

    while(true) 
    { 
     slow = slow.next; 
     if(fast.next != null){ 
      fast = fast.next.next; 
     } 
     else{ 
      return 0; 
     } 
     if(slow == null || fast == null){ 
      return 0; 
     } 
     if(slow.data == fast.data){ 
      return 1; 
     } 
    } 
} 
+1

爲什麼你讓這個返回一個'int'而不是一個'boolean',這將是回答yes/no問題的自然選擇,比如「這是否有循環?」? – ajb

+0

我假設'slow.data == fast.data'應該替換爲'equals()'或Apache的'objectEqual()',除非數據是基本類型。 –

+0

的問題,因爲在我的答案是,即使slow.data == fast.data,並不意味着它是同一個節點! – Untitled123

回答

2

你的問題是,當一個鏈接列表具有例如所有10的.data字段。然後它根據你的算法總是一個循環。你需要如果慢==快速返回1,而不是如果slow.data == fast.data。