2012-10-24 4 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의 경우 5 대신 첫 번째 호출에서 4를 반환합니다. temp는 헤더 노드 인 최상위 노드를 가리 킵니다. 목록에서 첫 번째 값 (5)을 반환하는 메소드는 어떻게 얻을 수 있습니까?

+1

그래서 무엇이 문제입니까? –

+0

방금 ​​편집했습니다. 질문은 다음과 같습니다. 어떻게 peek 메서드를 사용하여 목록의 첫 번째 값을 반환 할 수 있습니까? – user1766888

+1

당신은'header.next.value'를 사용할 수 있습니다 –

답변

1

링크 된 목록을 구현하는 좋은 방법은 header이 항상 목록의 빈 노드 여야하므로 it should not hold a value입니다. 이 방법으로 next 헤더에 전화하면 실제로 첫 번째 요소로 이동합니다. 다음 헤더 위와 digram에 도시 된 바와 같이

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

실제로 링크 된 목록의 첫 번째 요소입니다

그래서 픽 작업이 대신이 될 수 null 그래서 간단한 방법을 반환해야 NoSuchElementException을 던져 안됩니다

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

예. 나는 헤더 -> 5-> 4-> 3-> 2-> 1을 이해하지만, peek이 두 번 이상 호출되면 다른 값을 어떻게 반환하겠습니까? 예를 들어 첫 번째 peek은 5를 반환하지만 이후 peek을 호출하면 5가 반환됩니다. peek 메서드 만 사용하여 목록을 트래버스하는 방법은 무엇입니까? – user1766888

+1

픽 작업은 주먹 요소 만 반환합니다. –

+0

아, 알겠습니다. 감사. – user1766888

관련 문제