我想删除列表中最右边的一半,但有时候这段代码没问题。其他时间不行。
如果l包含A → B → C → D → E
,则在呼叫之后
l.removeRightmostHalf()
,l变为A → B → C
。
public void removeRightmostHalf() {
if (size % 2 != 0)
{
current = (size / 2) + 1;
while(current <= size)
{
for (int i = current + 1; i < size; i++)
nodes[i-1] = nodes[i];
size--;
if (size == 0)
current = -1;
else if (current == size)
current = 0;
}
}
else
{
current = (size / 2);
while(current <= size)
{
for (int i = current + 1; i < size; i++)
nodes[i-1] = nodes[i];
size--;
if (size == 0)
current = -1;
else if (current == size)
current = 0;
}
}
}
答案 0 :(得分:1)
public void removeRightmostHalf()
{
if (size % 2 != 0)
current = (size / 2) + 1;
else
current=size/2;
nodes.subList(current,size).clear()
}
答案 1 :(得分:0)
此代码将完成工作尝试并告诉我。 如果我的回答是对你的,请不要忘记选择它作为正确的答案。
public void removeRightmostHalf() {
if (size % 2 != 0)
size=(size / 2)+1;
else size=(size / 2);
}
这是怎么做的? 因为问题是要删除右半部分,以便将大小减小到一半,这将使数组的正确部分无法访问,就像Arraylist.Remove()那样。