2014-01-14 2 views
1

수업에서 Java에 대한 과제가 있습니다. 그것은 Employees에 관한 것이므로 Employee, EmployeeList 및 Nodes라는 세 가지 클래스가 있습니다. 나는 이중 연결리스트를 만들 필요가있다. 링크드리스트는 자바가 제공하지 않는 우리가 만든 커스텀 클래스입니다.이중 연결 목록의 끝에 NODE를 추가하는 방법은 무엇입니까?

이제 add (Employee e) 메서드가 작동하지 않습니다. 메서드는 Employee 객체의 매개 변수를 입력하며 목록의 끝에 추가해야합니다. 목록이 방법은 내가 목록에 자사의 벌금을 두 번째 직원을 추가 할 경우에도 완벽 노드에 직원을 추가 비어있을 때

은, 코드 간단한 단어에서

public void add(Employee emp) { 
    Node n = new Node(emp, null , null); 
    if(isEmpty() == true) { 
     setHead(n); 
     setTail(n); 
     n.setPrevious(null); 
     n.setNext(n); 
    }else { 
     Node c = getTail(); 
     c.setNext(n); 
     n.setPrevious(c); 
     setTail(n); 
    } 
} 

이다; 하지만 더 이상 추가하고 검색하려고하면 잘못된 결과가 발생합니다.

기본적으로 목록이 채워지면 노드 c에 목록의 꼬리가 할당됩니다. "꼬리 또는 꼬리표"다음은 null 이었지만 지금은 노드 n입니다. 노드 n은 꼬리 뒤의 다음 요소이므로 노드 n의 이전 링크는 노드 c이고 꼬리는 노드 n으로 업데이트됩니다.

여기서 내가 뭘 잘못하고 있니? 시도 할 경우

list.getHead().getNext().getNext().getPrevious().getEmployee().getName()); 

여기서 list = [a, b, c]; 결과는 c이고 b는이어야합니다.

;

head = a, a.getNext().getNext() == c; 
c.getPrevious() == b; 

하지만 코드에서 뭐가 문제 다

남아? 도와주세요. 높은

다음 코드에 의해 그림과 같이 add 방법 아무 문제가 없습니다
+2

주어진 코드를 따르는 것 외에 무엇이 문제인지 파악하는 데 도움이되지 않습니다. if (isEmpty() == true) { setHead (n); setTail (n); n.setPrevious (null); n.setNext (null); // n.setNext (n); } –

+0

거기에 맞지 않는 부분이 무엇이라고 생각하십니까? 덕분에 – Sabbib

+0

내 말은 ... 당신의 코드는 isEmpty()가 true 일 때 주어진 코드에서 알아낼 수있는 논리적 인 것입니다. n.setNext()는 n 대신에 null 값을 가져야합니다. 문제를 해결하기가 어려울 것입니다. 더 나은 중단 점을 넣고 디버그 모드에서 응용 프로그램을 실행하고 노드가 잘못 할당/배치되는 곳을 확인하십시오. –

답변

0

감사 :

public class Q21114229 { 

public static void main(String[] args) { 

    DLList<Employee> l = new DLList<Employee>(); 
    l.add(new Employee("a")); 
    l.add(new Employee("b")); 
    l.add(new Employee("c")); 
    System.out.println("Employee b test: " + l.getHead().getNext().getNext().getPrevious().get().getName()); 
} 

static class Node<T> { 

    private Node<T> next; 
    private Node<T> previous; 
    private T value; 
    public Node(T value) { this.value = value; } 
    public T get() { return value; } 
    public Node<T> getNext() { return next; } 
    public void setNext(Node<T> next) { this.next = next; } 
    public Node<T> getPrevious() { return previous; } 
    public void setPrevious(Node<T> previous) { this.previous = previous; } 
} 

static class DLList<T> { 

    private Node<T> head; 
    private Node<T> tail; 
    public Node<T> getHead() { return head; } 
    public Node<T> getTail() { return tail; } 
    public boolean isEmpty() { return (head == null); } 

    public void add(T value) { 
     Node<T> n = new Node<T>(value); 
     if (isEmpty()) { 
      head = tail = n; 
     } else { 
      tail.setNext(n); 
      n.setPrevious(tail); 
      tail = n; 
     } 
    } 

} 

static class Employee { 

    private String name; 
    public Employee(String name) { this.name = name; } 
    public String getName() { return name; } 
} 

} 

출력 : 다른 목록-방법

Employee b test: b 

하나 제대로 노드의를 업데이트하지 않습니다 다음/이전 변수.

관련 문제