【问题标题】:Java Deletion Function [closed]Java删除功能[关闭]
【发布时间】:2017-11-20 06:56:58
【问题描述】:

我已经添加了插入功能和显示谁能帮忙 我与删除那将不胜感激。

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

【问题讨论】:

标签: java linked-list


【解决方案1】:

删除节点就像删除它的引用可访问性一样。 在您的情况下,您希望通过比较变量的给定值来删除节点。因此,从头节点开始,您必须比较每个节点的数据(具体来说就是 Variable 数据)。您必须比较两个节点的数据,然后简单地中断,然后简单地应用链接列表删除逻辑。这里主要关注的是比较两个节点的数据。不要使用

比较节点

.equals() 方法

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

【讨论】:

  • 如果您复制/粘贴我的答案而不是编辑它,您至少应该编写可以正确编译的代码。我已将 Object 用于数据/变量,因此没有名称和值。我使用equals 来简化代码,因为它可以更轻松地专注于linkedList 逻辑。最重要的是,我什至不知道 equals 应该是什么意思(只是名称或名称和值?)。变量应该在其equals 方法中定义它,而不是在linkedList 中硬连线。
  • 对不起,原谅我。我不知道上述事实。我会尽快更正我的代码
【解决方案2】:

根据您的代码和您的解释,我假设 ls1 是您列表的第一个节点,您希望删除列表中第一个以 var1data 的节点:

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

【讨论】:

  • 嗯,非常感谢......真的很感激......
  • 不客气。对于您提出的下一个问题,请尽量简洁。不知道您是否看到我已经编辑了您的问题以删除代码中不必要的部分(好吧,至少对于这个问题来说是不必要的)。如果您将代码 sn-ps 减少到最低限度,它会使您更容易理解您的要求。此外,您可能想检查我在您的问题下的评论中链接到的问题。那里的答案比较详细,比如处理null
  • 但是在我的代码中你得到了菜单,所以当你选择 1 时,你可以用它们的变量插入值。假设你运行它要求的代码 1-插入 2-显示 3-删除 4-退出。 ..假设您选择1次插入,因此它首先要求插入变量(a),然后是值(2)等。但是,当您要删除时,它首先要求输入变量,然后是值.. . 我不擅长解释希望它有帮助
  • 这是我第一次访问这个网站
  • 当然,也许你可以把那部分留在里面,但我认为在删除中间部分(具有奇怪名称的类)和菜单之后,代码是非常不言自明的。只需将LkList 重命名为LinkedList,每个人都会立即了解您的需求。这取决于每个问题需要显示多少代码。希望我能帮上忙。 (另外,如果您同意我所做的修改,您可以接受(或改进)它们,以便让下一位读者看到它们。)
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多