java - 在java中递归返回已删除的节点
问题描述
我使用 C++ 学习了大多数链接数据结构,其中有可用的引用传递,并且递归非常简单。我最近切换到 Java,但我总是对这些结构的递归版本感到困惑。
我想将该节点从列表中删除。但我想返回节点。当我从分支返回已删除的节点时else if
,它预计会弄乱列表。但我看不出有什么办法。
public node deleteval (int val){
node prev = head;
head = deleteval(head,prev,val);
return head;
}
private node deleteval(node head,node prev, int val){
if(head == null){
return null;
}
else if (head.value == val){
prev.next = head.next;
node deleted = head;
head = prev;
return head.next;
}
prev = head;
head.next = deleteval(head.next,prev,val);
return head;
}
这不是作业,只是试图理解。感谢您的任何意见。
解决方案
要删除节点,您只需要prev.next = head.next
处理root
节点的边缘情况。不需要堆栈或任何其他支持的数据结构,您只需更深入地递归到列表中,直到找到值或到达末尾。
private Node root;
public Node deleteVal(int val) {
return deleteRec(root, null, val);
}
private Node deleteRec(Node head, Node prev, int val) {
if (head == null) {
return null;
}
if (head.value == val) {
if (prev != null) {
prev.next = head.next; // deleting non-root node
} else {
root = null; // deleting root node
}
return head;
}
return deleteRec(head.next, head, val);
}
推荐阅读
- python - Elem 无法滚动到视图中
- python - Pandas - 根据其他列中的值计算具有条件的列的平均值
- javascript - javascript点击事件不触发动作
- python - 如何打开文件并删除第一项(索引 0 处的项)
- python - ImportError:无法从“numpy.core”(未知位置)导入名称“array”
- javascript - 克隆每个元素追加下一个元素
- r - 在不同的数据组上绘制不同的自定义 stat_function
- javascript - 下载Excel后的Javascript回调函数
- javascript - Javascript - 任何跳过未定义属性的休息运算符?
- python - 无法在 PyCharm 中通过 networkx 显示图形