我正在尝试为头链表类编写一个peek方法。但是,它不会返回第一个值。
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,首先?
答案 0 :(得分:1)
实现链接列表的一种好方法是header
应始终为列表中的空节点,因此it should not hold a value
。这样当您在标题上调用next
时,您实际上只会转到第一个元素。
header http://easy2teach.net/wp-content/uploads/2011/06/header-linked-list.jpg
如上所述digram as header next实际上是Linked List的第一个元素
所以Peek操作不应该抛出NoSuchElementException
而应该返回null
这么简单的方法可以
public E peek ()
{
if(check element does exist using size ==0)
return null;
else
return highest.next.value;
}