java - 使用java中的单个方法/函数从任何索引处的单链表中删除一个节点
问题描述
我想从java中的单链表中创建和删除一个节点。删除方法将获取节点的索引并删除该节点。
逻辑正在运行,但它没有删除第一个索引(0)处的节点我如何修改此代码以便它可以在不使用额外循环的情况下删除任何位置的节点。我知道我在代码中使用起始索引为 1,但我无法理解如果输入的索引为零,那么程序如何使用相同的循环删除“previousNode”。它将需要另一个循环(基于此逻辑)。有没有办法删除这个额外的循环
public E deleteNode(int t) throws IndexOutOfBoundsException{
if(size==0)
return null;
if(t>=size)
throw new IndexOutOfBoundsException("Invalid Input");
Node<E> previousNode=head;
Node<E> currentNode=previousNode.getNext();
int currentIndex=1;
while(currentIndex<t){
previousNode=previousNode.getNext();
currentNode=previousNode.getNext();
currentIndex++;
}
previousNode.setNext(currentNode.getNext());
size--;
return currentNode.getElement();
}
如果用户输入索引 0,那么 {1,2,3,4} 的输出应该是 {2,3,4} 但我得到 {1,3,4}。
解决方案
一种选择是将其作为特殊情况处理,因为它需要更新head
。
if (t == 0) {
head = head.getNext();
}
//rest of your code..
Node<E> previousNode=head;
//...
或者,你可以这样做
Node<E> previousNode = null;
Node<E> currentNode = head;
int currentIndex = 0;
while(currentIndex < t) {
previousNode = currentNode;
currentNode = currentNode.getNext();
currentIndex++;
}
if (previousNode == null) { //removing first node
head = head.getNext();
} else {
previousNode.setNext(currentNode.getNext());
}
size--;
return currentNode.getElement();
但无论如何,您需要将其作为特殊情况处理。
推荐阅读
- amazon-web-services - 无法使用设计器 vew 从 lambda 向 SNS 发送数据
- python - 如何在 matplotlib 的散点图中偏移文本?
- linux - 如何在 awk 中使用反向匹配以及其他模式
- config - 如何从 WSL2 同步 mintty 配置?
- react-native - 如何在通过电缆连接到笔记本电脑的 android 设备中运行 ignite 应用程序?
- javascript - 正则表达式 - 在给定数量的 3 个字母序列之后,如何匹配特定的 3 个字母序列?
- gradle - gradle buildscript“name”变量解析不起作用
- node.js - 在aws pinpoint(NodeJS)中,当用户触发客户事件时如何触发电子邮件
- ruby-on-rails - Rails 应用程序的每个请求的入口点是什么?
- python-3.x - 发送带有cookie的post请求时遇到问题----urllib.error.HTTPError: HTTP Error 503: Service Unavailable