1

我正在尝试为标题链表类编写一个 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 的方法?

4

1 回答 1

1

实现链表的一个好方法是链表中的header节点应该始终是空节点it should not hold a value。这样,当您调用next标题时,您实际上只会转到第一个元素。

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

如上图所示,标题下一个实际上是链接列表的第一个元素

所以你的 Peek 操作不应该抛出NoSuchElementException,而是应该返回null,所以简单的方法可以

 public E peek ()
 {
   if(check element does exist using size ==0)
      return null;
   else 
      return highest.next.value;
 }
于 2012-10-24T07:27:41.980 回答