Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过搜索参考java删除节点_Java_Reference_Linked List - Fatal编程技术网

通过搜索参考java删除节点

通过搜索参考java删除节点,java,reference,linked-list,Java,Reference,Linked List,所以我写了一个链接列表,其中包含一个学生参考资料和一个下一个参考资料。我对插入没有异议。另一方面,我需要有关删除和查找项目的帮助。所以基本上我使用find方法来查找学生对字符串的引用。然后使用delete方法删除与该引用对应的节点 public void deleteStudentNode(StudentNode delete) { StudentNode it = new StudentNode(); delete = shead;

所以我写了一个链接列表,其中包含一个学生参考资料和一个下一个参考资料。我对插入没有异议。另一方面,我需要有关删除和查找项目的帮助。所以基本上我使用find方法来查找学生对字符串的引用。然后使用delete方法删除与该引用对应的节点

   public void deleteStudentNode(StudentNode delete)
   { 
          StudentNode it = new StudentNode();
          delete = shead;
          it = shead; 
          //StudentNode b = new StudentNode();

          while(it.getSptr() != findStudentByName(""))        
          {
             delete = it;
             it = it.getSptr();
          }
          delete.setSptr(null);         
          setShead(delete);
          //d.setStudent(null);                
   }

   public StudentNode findStudentByName (String findName)
   {
            StudentNode find = shead;

      while(find.getStudent().getName() != findName)
      {
         if(find.getSptr() == null)

            return null;

         else

            find = find.getSptr();      
      }
                  return find; 
   }

我建议为您的单链表实现
Iterable
接口。在那之后你需要做的就是

public void deleteByName(StudentList studentList, String nameToDelete) {
    Iterator iterator = studentList.iterator();
    while (iterator.hasNext()) {
        if(iterator.next().getName().equals(nameToDelete)) {
            iterator.remove();
        }
    }
}

提示,要遍历一个链表,您需要两个指针:当前元素和上一个。

我建议为一个链表实现
Iterable
接口。在那之后你需要做的就是

public void deleteByName(StudentList studentList, String nameToDelete) {
    Iterator iterator = studentList.iterator();
    while (iterator.hasNext()) {
        if(iterator.next().getName().equals(nameToDelete)) {
            iterator.remove();
        }
    }
}

提示,要遍历一个链表,您需要两个指针:当前元素和上一个。

我不知道这是否是唯一的问题,但您应该使用
equals
来比较字符串,而不是
=
,请参见。@RobinKrahl抱歉,没有正确阅读您的注释。是的,要比较字符串,您应该使用
equals
@esin88。我注意到了这一点,但我不理解这种方法。我不知道这是否是唯一的问题,但您应该使用
equals
来比较字符串,而不是
=
,请参见。@RobinKrahl抱歉,没有正确阅读您的注释。是的,要比较字符串,您应该使用
equals
@esin88。我注意到了这一点,但我不理解这种方法。我想你的答案让我很困惑,到目前为止我很喜欢。唯一的问题是我不能使用这个界面。必须严格使用我的方法。但是我理解你的迭代器。@Qwanny你的意思是你必须完全使用这两种方法
deleteStudentNode(StudentNode delete)
findStudentByName(String findName)
?现在没问题了,我已经让它开始工作了。现在我想在另一个链接列表中找到一个链接。谢谢你的回答,到目前为止我很喜欢。唯一的问题是我不能使用这个界面。必须严格使用我的方法。但是我理解你的迭代器。@Qwanny你的意思是你必须完全使用这两种方法
deleteStudentNode(StudentNode delete)
findStudentByName(String findName)
?现在没问题了,我已经让它开始工作了。现在,我试图在另一个链接列表中找到一个链接列表