通过布尔方法从LinkList中删除元素



我正试图为一个学校项目创建自己的链表类,但我在本应实现的函数上遇到了问题。

@Override
public boolean remove(E elementToBeRemoved) {
MyNode<E> indexNode = first;
MyNode<E> prevNode = null;
for (int i = 0; i < lSize; i++) {
if (indexNode.data.equals(elementToBeRemoved)) {
prevNode.next = indexNode.next;
indexNode = null;
return true;
}
prevNode = indexNode;
indexNode = indexNode.next;
}
return false;
}

现在这个函数的实现方式(据我所知(是,当我到达包含我想从列表中删除的数据的节点时,它会删除该节点,并返回true,表示节点已被删除。然而,这也意味着我不能一次删除重复的节点,要删除elementToBeRemoved的所有实例,我必须多次使用这个删除方法。有没有办法实现这个函数,让它一次性删除列表中包含elementToBeRemoved的所有节点?

当您第一次遇到要删除的元素时,不应该返回true,而是应该有一个布尔值,只要您找到该元素,就会将其设置为true。

Boolean elementFound = false;

然后你更新,如果你找到元素

最后只需返回布尔值即可。我还添加了一个else语句,因为当你找到一个元素时,你想在currentNodex.next节点旁边设置previousNode.next,然后将当前索引设置为下一个节点,但如果你找不到元素,你只想将上一个节点设置为当前节点,将当前节点设置为下个节点

@Override
public boolean remove(E elementToBeRemoved) {
Boolean elementFound = false;
MyNode<E> indexNode = first;
MyNode<E> prevNode = null;
for (int i = 0; i < lSize; i++) {
if (indexNode.data.equals(elementToBeRemoved)) {
prevNode.next = indexNode.next;
indexNode = indexNode.next;
elementFound = true;
}
else{
prevNode = indexNode;
indexNode = indexNode.next;
}  
}
return elementFound;
}

您还需要确保在删除的每个元素后减少lSize

相关内容

  • 没有找到相关文章