Java删除函数
我已经添加了插入功能和显示功能,有人能帮我吗 如能删除,我将不胜感激Java删除函数,java,linked-list,Java,Linked List,我已经添加了插入功能和显示功能,有人能帮我吗 如能删除,我将不胜感激 public class Node { Object data; Node next; } public class LkList { public Node insertVar(Object var1, Node ls1) { Node p = new Node(); p.data = var1; p.next = ls1; ls1 =
public class Node
{
Object data;
Node next;
}
public class LkList {
public Node insertVar(Object var1, Node ls1) {
Node p = new Node();
p.data = var1;
p.next = ls1;
ls1 = p;
return ls1;
}
public Node deleteVar(Object var1, Node ls1){
// deletion function goes here
}
public void printL(Node ls1) {
System.out.print("The lklist of variables is: ");
Node p = ls1;
while (p != null) {
System.out.print("[" + p.data + "]" + "->");
p = p.next;
}
System.out.println();
}
}
根据您的代码和解释,我假设
ls1
是列表中的第一个节点,您希望删除列表中第一个将var1
作为其数据的节点:
public Node deleteVar(Object var1, Node ls1)
{
if (ls1.data.equals(var1))
{
//simply pop the first node
return ls1.next;
}
else
{
Node prev = ls1;
while (prev.next != null)
{
if (prev.next.data.equals(var1))
{
// skip the node by linking the previous one to the next one directly
prev.next = prev.next.next;
break;
}
}
return ls1;
}
}
删除节点就像删除其引用可访问性一样。
在本例中,您希望通过比较变量的给定值来删除节点。因此,从头部节点开始,您必须比较每个节点的数据(具体来说是变量)。您必须比较两个节点的数据,然后简单地中断,然后简单地应用链接列表删除逻辑。这里唯一主要关心的是比较两个节点的数据。不要使用来比较节点
.equals()方法
你为什么要删除并再次发布?从何处删除?@Eran,因为我想它被否决了。@BrijRajKishore实际上不是。它甚至有一个答案(不是我的)。非常感谢你。。。非常感谢……不客气。对于你提出的下一个问题,请尽量简洁。不知道您是否看到我编辑了您的问题以删除代码中不必要的部分(至少对于这个问题来说是不必要的)。如果将代码片段减少到最少,那么理解您的问题就容易多了。此外,您可能希望检查我在您的问题下的评论中链接到的问题。这里的答案更为详细,例如处理null
。但在我的代码中,您有一个菜单,因此当您选择1时,您可以插入值及其变量。。假设您运行它要求的代码1-插入2-显示3-删除4-退出。。。假设您选择1插入,那么它要求首先插入变量(a),然后插入值(2),等等。。但是,当您要删除它时,首先要求输入变量,然后输入值。。。我不擅长解释希望它能帮上忙这是我第一次在这个网站上,也许你可以把那部分留在里面,但我认为在删除中间部分(名字很奇怪的类)和菜单之后,代码是非常不言自明的。只需将LkList
重新命名为LinkedList
,每个人都会立即了解您需要什么。这取决于每个问题需要显示多少代码。希望我能帮忙。(此外,如果您同意我所做的编辑,您可以接受(或改进)这些编辑,使其对下一位读者可见。)如果您复制/粘贴我的答案而不是编辑它,您至少应该编写能够正确编译的代码。我对数据/变量使用了Object
,因此没有名称和值。我使用了equals
来简化代码,因为这样可以更容易地专注于linkedList逻辑。除此之外,我甚至不知道equals应该是什么意思(只是名称还是名称和值?)。变量应该在其equals
方法中定义它,而不是将其硬连接到linkedList中。对不起,请原谅。我不知道上述事实。我会尽快更正我的代码
public Node deleteVar(Object var1, Node ls1) {
if (ls1.data.varName.equals(var1.varName) && ls1.data.varValue.equals(var1.varValue)) { // If it is the first node which is to be deleted
return ls1.next;
}
else {
Node prev = ls1;
while (prev.next != null) {
if (prev.next.data.varName.equals(var1.varName) && prev.next.data.varValue.equals(var1.varValue)) {
// skip the node by linking the previous one to the next one directly
prev.next = prev.next.next;
break;
}
}
return ls1;
}
}