2012-10-24 32 views
1

我正在嘗試爲頭鏈表類創建一個peek方法。但是,它不返回第一個值。Java方法不會返回鏈表的第一個值

public E peek() throws NoSuchElementException { 
    ListNode<E> temp = highest; 
    ListNode<E> r = temp; 

    if (temp.next == null) throw new NoSuchElementException(); 
    else r.next = temp.next.next; 

    return r.next.value; 
} 

我明白爲什麼它不返回第一個值。因爲在我的代碼中else r.next已經指向列表中的下一個節點。因此,對於5,4,3,2,1它將在第一次調用時返回4,而不是5. temp指向最高節點,即頭節點。我怎樣才能讓方法返回列表中的第一個值,第一個值是5?

+1

那麼,有什麼問題呢? –

+0

剛編輯它。問題是:我怎樣才能讓peek方法返回列表中的第一個值,5? – user1766888

+1

你可以使用'header.next.value' –

回答

1

實施鏈接列表的好方法是header應該總是在列表中的空節點,所以it should not hold a value。通過這種方式,當您在標題上調用next時,您實際上只會轉到第一個元素。

header http://easy2teach.net/wp-content/uploads/2011/06/header-linked-list.jpg

如上雙字母組合作爲頭描繪未來實際上是鏈表的第一個元素

所以你查看操作不應該拋出NoSuchElementException相反,它應該返回null這樣簡單的方法可以

public E peek() 
{ 
    if(check element does exist using size ==0) 
     return null; 
    else 
     return highest.next.value; 
} 
+0

是的。我知道header-> 5-> 4-> 3-> 2-> 1,但如果peek被多次調用,你將如何返回其他值?例如first peek會返回5,但隨後的調用只能查看返回5.如何僅使用peek方法遍歷列表? – user1766888

+1

Peek操作只返回第一個元素。 –

+0

啊,我明白了。謝謝。 – user1766888