Java 通过将值作为参数传递,从排序列表中删除节点
您好,我正试图通过将值作为参数传递来从有序列表中删除节点,但我总是得到和Null指针异常。下面是我用来做这件事的方法Java 通过将值作为参数传递,从排序列表中删除节点,java,Java,您好,我正试图通过将值作为参数传递来从有序列表中删除节点,但我总是得到和Null指针异常。下面是我用来做这件事的方法 public void sortedDelete(int social){ if(sortedIsEmpty()){ System.out.println("List is Empty"); } else if(sortedSize() == 1){ if(head.getData() == social)
public void sortedDelete(int social){
if(sortedIsEmpty()){
System.out.println("List is Empty");
}
else if(sortedSize() == 1){
if(head.getData() == social)
head = null;
}else{
SocialNode x = head;
if(x.getData() == social)
head = head.getNext();
else{
int count = 1;
x = x.getNext();
while(x!= null){
if(x.getData() == social && x.getNext() != null){
sortedGet(count-1).setNext(sortedGet(count+1));
}else if(x.getData() == social && x.getNext() == null){
sortedGet(count-1).setNext(null);
}
x = x.getNext();
count ++;
}
}
}
}
完整的课程代码在这里
使用arrayList的更好方法,但我可以看到在您的情况下不允许使用arrayList。在这种情况下,您需要删除旧数组并创建一个比原始数组小1的新数组,然后将旧数组复制到新数组。您可以使用下面的代码
package com.rais;
public class ArrayExample {
public static void main(String[] args) {
int[] numbers = {1,2,3,4,5,6,7};
numbers = remove(numbers, 4);
for (int i : numbers) {
System.out.println(i);
}
}
public static int[] remove(int[] originalArray, int elemntToDelete)
{
for (int i = 0; i < originalArray.length; i++)
{
if (originalArray[i] == elemntToDelete)
{
int[] newArray = new int[originalArray.length-1];
System.arraycopy(originalArray, 0, newArray, 0, i);
System.arraycopy(originalArray, i+1, newArray, i, originalArray.length-i-1);
return newArray;
}
}
return originalArray;
}
}
package com.rais;
公共类数组示例{
公共静态void main(字符串[]args){
int[]数={1,2,3,4,5,6,7};
数字=删除(数字,4);
用于(int i:数字){
系统输出打印LN(i);
}
}
公共静态int[]删除(int[]原始数组,int elemntToDelete)
{
for(int i=0;i
您在哪一行得到异常?我想最后一行else应该是else if(x.getData()==social)
。但是如果我看得对的话,这不应该导致NullPointerException。但现在的问题是,如果我已经复制了,我怎么能用一个循环删除所有这些内容。现在它只是删除了找到的第一个对象。我没有完全阅读您的算法,但是要比较两个对象,您必须使用equals。在SocialNode类中覆盖此方法,然后更新代码。@davidbuzatto他只是在比较integersAlert!您应该使用equals来比较对象!这是一个前置int数组。我需要使用一个LinkedList。我必须从头开始创建它。我成功地删除了元素,但不能递归地删除。@Real:对不起,我以为您正在处理它的列表节点。。。睡觉时间:D@Leon您说过不允许使用arrayList或其他来完成任务。现在你说你可以使用LinkedList。我请求你们提出正确的问题。