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;
    }
}