2017-03-16 5 views
-3

프로젝트를 수행하려고하는데 연결된 목록에서 특정 노드를 찾아 삭제하는 방법을 모르겠습니다. 우리 교수는 우리가이 정확한 수업을 사용하기를 원합니다.링크 된 목록에서 특정 노드를 찾아 삭제하는 방법은 무엇입니까? 이러한 특정 클래스를 사용하는 java

public class StudentList { 

    private StudentNode shead ; 

    public StudentList(){} 
    public void setShead(StudentNode sh) 
    { 
     shead = sh; 
    } 

    public StudentNode getShead() 
    { 
     return shead; 
    } 
    public void deleteStudentNode(StudentNode s) 
    {  
    } 

    public StudentNode findStudentByName(String s) 
    { 
    } 
} 
는 는

나는 다음 클래스의 접근 자와 뮤 테이터 방법에 대한 공간을 낭비하지 것이다

학생 클래스

public class Student extends Person{ 

    private String major; 
    private double gpa; 
    public Student(){} 
} 

사람 클래스

public class Person { 
    private String name; 
    private String gender; 
    public Person(){} 
    public Person (String n, String g) 
    { 
     n = name; 
     g = gender; 
    } 
} 

편집 - 여기가입니다 학생 노드

public class StudentNode { 
private Student student; 
private StudentNode sptr; 
private FriendList fptr; 

StudentNode() 
{ } 

public StudentNode(Student s) 
{ 
    s = student; 
}  

public void setStudent(Student s) 
{ 
    student = s; 
} 

public Student getStudent() 
{ 
    return(student); 
} 

public void setSptr(StudentNode s) 
{ 
    sptr = s; 
} 

public StudentNode getSptr() 
{ 
    return(sptr); 
} 
+0

그래서 'StudentNode' 클래스를 직접 만들어야합니까? 그 일에 대해 어떤 일을 했습니까? (그리고 우리를 보여주세요!) –

+0

@StephenP 지금 추가했습니다. – abc123

답변

0

학생 이름이있는 학생 노드를 찾거나 삭제하려면 이름 필드에 액세스해야합니다. 당신은 Person 클래스에 대한 몇 가지 게터/세터를 추가 할 수 있습니다

public class Person { 
    private String name; 
    private String gender; 

    public Person() { 
    } 

    public Person(String n, String g) { 
     n = name; 
     g = gender; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

다음 찾기를 구현하고 같이 삭제 :

public class StudentList { 

    private StudentNode shead; 

    public StudentList() { 
    } 

    public void setShead(StudentNode sh) { 
     shead = sh; 
    } 

    public StudentNode getShead() { 
     return shead; 
    } 


    private boolean isSameStudent(Student a, Student b) { 
     return a != null && b != null && a.getName().equals(b.getName()); 
    } 

    public void deleteStudentNode(StudentNode s) { 
     if (s == null) { 
      // Cannot delete a null node 
      return; 
     } 
     if (isSameStudent(s.getStudent(), shead.getStudent())) { 
      // If the node to delete is head 
      shead = shead.getSptr(); 
      return; 
     } 
     StudentNode ptr = shead; 

     while (ptr != null) { 
      if (ptr.getSptr() == null) { 
       // There is no node after ptr 
       return; 
      } 
      if (isSameStudent(ptr.getSptr().getStudent(), s.getStudent())) { 
       // The next node is the node to delete 
       ptr.setSptr(ptr.getSptr().getSptr()); 
       break; 
      } 
      ptr = ptr.getSptr(); 
     } 
    } 

    public StudentNode findStudentByName(String s) { 
     StudentNode ptr = getShead(); 
     while (ptr != null) { 
      if (ptr.getStudent().getName().equals(s)) { 
       return ptr; 
      } 
      ptr = ptr.getSptr(); 
     } 
     // not found 
     return null; 
    } 
} 

은 당신을 도울 수 홉!