2011-04-03 73 views
1

向IntegerList类添加一个方法void removeFirst(int newVal),该方法从列表中删除第一个值。如果该值没有出现在列表中,它应该什么也不做(但它不是错误)。删除一个项目不应该改变数组的大小,但是请注意数组的值需要保持连续,所以当你删除一个值时,你必须将所有的东西都移回来填满它的空间。还要记住减少跟踪元素数量的变量。如何删除数组中元素值的第一个实例?

请帮忙,我已经尝试了本网站上列出的所有关于“从数组中删除元素”的其他解决方案,但都没有工作。

+2

阅读这个问题,它说:“当你删除一个值,你将不得不把它转移一切,以填补它的空间”。你明白这句话的意思吗?这是您解决方案的关键。 – 2011-04-03 05:09:08

+0

如果人们知道你正在编程什么语言,答案可能会更容易......数据结构实际上是一个数组吗?或者是一个链表? – 2011-04-03 05:10:32

+0

它是一个数组,而不是一个链表。这在java中。我假设这意味着其余元素的索引必须从0到array.length保持连续。 – 2011-04-03 05:23:38

回答

0

你可以这样做:

int count; //No of elements in the array 
for(i=0;i<count;i++) 
{ 
    if(Array[i]==element) 
    { 
      swap(Array,i,count); 
      if(count) 
      --count; 
      break; 
    } 


} 
int swap(int Array[],int i,int count) 
{ 
    int j; 
     for(j=i;j<=count-i;j++) 
     a[i]=a[i+1]; 

} 

这不是完全Implementation.You必须创建一个类,并做到这一点。

+0

+0:这会起作用,但相当昂贵。交换可以称为洗牌。 ;)'if(count)'不能编译或做任何事情。 – 2011-04-03 05:51:08

+0

在这种情况下应该使用'System.arraycopy' – 2011-04-03 08:04:29

1

此方法支持与Collection.remove()相同的功能,这是ArrayList移除第一个匹配元素的方式。

public boolean remove(int n) { 
    for (int i = 0; i < size; i++) { 
     if (array[i] != n) continue; 
     size--; 
     System.arraycopy(array, i + 1, array, i, size - i); 
     return true; 
    } 
    return false; 
} 

而不是你自己写的代码,我建议你看看Trove4J的TIntArrayList这是int[]的包装还可以阅读代码的ArrayList,看看它是怎么写的。

相关问题