【问题标题】:Linked list add and remove function链表添加和删除功能
【发布时间】:2013-11-28 20:11:21
【问题描述】:

我正在尝试创建一个包含项目的链接列表,它似乎正在添加到列表中,因为我添加了三个并且长度表明它在列表中有 3 个项目。

我的删除功能如何不起作用我正在尝试从列表中删除具有三个项目的列表中的特定项目,但它只是返回 false 并且不会从列表中删除该项目

public void tableInsert (T newItem) throws TableException {
    if (head == null) 
        head = new Node(newItem);
    else {
        Node tmp = head;
        while (tmp.getNext() != null)
            tmp = tmp.getNext();
        tmp.setNext(new Node(newItem));
    }
}

这是删除功能

public boolean tableDelete (KT searchKey) {
    if (head.getItem() == searchKey) {
        head = head.getNext();
        return true;
    }

    Node current = head.getNext();
    Node prev = head;

    while (current!= null) {
        if (current.getItem() == searchKey){
            prev.setNext(current.getNext());
            return true;
        }
        prev = current;
        current = current.getNext();
    }

    return false;
}

【问题讨论】:

  • 尝试调试您的代码。
  • 第一步是正确缩进你的代码。这里甚至似乎少了几个大括号。
  • @NPE 建议的 equals 似乎是最好的选择。我的第二个猜测是忘记在 Node 构造函数中设置项目。
  • searchKey 不是原始数据,请勿使用== 进行比较

标签: java


【解决方案1】:

我怀疑问题是使用== 进行的相等比较。这会比较对象引用,而您可能需要对 current.getItem()searchKey 进行深度比较。

【讨论】:

    【解决方案2】:

    通过使用“==”比较,您只比较对象的引用(因此,除非您比较对相同对象的引用,否则您总是会得到错误)。你的对象应该实现comparable(互联网上有很多关于它的资料)或者包含你自己的比较适当字段等的函数。

    还有,为什么插入对象类型T,却删除对象类型KT?

    【讨论】:

    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 2018-07-31
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多