2016-01-29 55 views
0

我修改鏈表和在書中我用他們建議將以下代碼搜索一個特定的值:遍歷鏈表時保持頭參考?

public ListElement<Integer> find(ListElement<Integer> head, int data){ 
    ListElement<Integer> elem = head; 
    while(elem != null && elem.value() != data){ 
     elem = elem.next(); 
    } 
    return elem; 
} 

但是,我們不能重複上head直接?

回答

3

你可以 - 但那麼這將是一個有點誤導性的代碼段。如果我看一個叫head變量,我希望它是一個列表的頭 - 而如果我做的:

head = head.next(); 

...然後head是指一些東西,不是頭的名單。當變量名稱暗示某些不真實的東西時,總是令人擔憂。這在技術上會起作用,但這不是一個好主意。

我會親自編寫的代碼更是這樣的:

public ListElement<Integer> find(ListElement<Integer> head, int data) { 
    for (ListElement<Integer> current = head; 
      current != null; 
      current = current.next()) { 
     if (current.value == data) { 
      return current; 
     } 
    } 
    // No entry found 
    return null; 
} 

這樣的「未找到」的情況下更自然不同,從「發現」情況 - 它會更容易改變它拋出一個例如,如果找不到該值,例如。

+0

呃,好的,這是有道理的。我認爲這是一個核心原因,我不明白引用...謝謝! – Generalbrus