gpt4 book ai didi

java - 从链接列表中删除所有出现的项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:13 25 4
gpt4 key购买 nike

我已经为这个实验作业做了几个小时,但不明白为什么这段代码不起作用。问题是添加方法 int removeEvery(T item) 删除所有出现的 item 并将删除的项目数返回到实现链接列表接口(interface)的链接列表类。

这是我的代码:它删除了一些出现的项目,但不是全部。

public int removeEvery(T item){
int index = 0;
Node currentNode = firstNode;
for(int i = 1; i <= numberOfEntries; i++)
{
System.out.println(currentNode.getData());
if (item.equals(currentNode.getData())){
index++;
remove(i);}
else{
currentNode = currentNode.getNextNode();}
}
if(index != 0)
return index;
return -1;
}

这是包含在 LinkList 类中的 remove 方法:

public T remove(int givenPosition)
{
T result = null; // return value

if ((givenPosition >= 1) && (givenPosition <= numberOfEntries))
{
assert !isEmpty();
if (givenPosition == 1) // case 1: remove first entry
{
result = firstNode.getData(); // save entry to be removed
firstNode = firstNode.getNextNode();
if (numberOfEntries == 1)
lastNode = null; // solitary entry was removed
}
else // case 2: givenPosition > 1
{
Node nodeBefore = getNodeAt(givenPosition - 1);
Node nodeToRemove = nodeBefore.getNextNode();
Node nodeAfter = nodeToRemove.getNextNode();
nodeBefore.setNextNode(nodeAfter); // disconnect the node to be removed
result = nodeToRemove.getData(); // save entry to be removed

if (givenPosition == numberOfEntries)
lastNode = nodeBefore; // last node was removed
} // end if

numberOfEntries--;
} // end if

return result; // return removed entry, or
// null if operation fails
} // end remove

最佳答案

您的链表有一些特别之处,您可以使用 current.getNextNode 访问下一个元素,但使用元素索引删除。您应该查看实现的其余部分是如何管理该索引的。第一个元素的索引是 0 还是 1(您从 1 开始循环)。当您删除一个元素时,所有元素的索引会发生什么。元素知道它们的索引吗?

你可以使用类似的东西

  int deletedNodes = 0;
int currentIndex = 0; // check if 1 or 0
currentNode = fist;
while(currentNode != null){ // I guess lastNode.getNextNode() is null
if(//should remove){
remove(currentIndex);
deletedNodes++
// probably no need to change the index as all element should have been shifted back one index
} else {
currentIndex++; // index changes only if no node was deleted
}
currentNode = currentNode.getNextNode(); // will work even if it was deleted
}
return deletedNodes;

关于java - 从链接列表中删除所有出现的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com