从链接列表java

时间:2016-04-13 01:57:36

标签: java loops data-structures linked-list

我尝试删除符合链接列表条件的多个节点。该程序有点复杂,所以我要说明它的要点。我的链表中的节点具有以下特征(与数字相关联的名称):

Name Number
Dog     1
Cat     1
Rat     2
Donkey  3
Fish    1

我希望能够删除编号为1的节点。我的删除功能:

public void Delete(Int N) {

        Node current = Head;
        Node previous = Head;


        while (current.getNum() != N) {

            if (current.getNextNode() == null) {

                System.out.print("Not found");

            } else {

                previous = current;

                current = current.getNextNode();

            }

        }

        if (current == Head) {

            Head = Head.getNextNode();

        } else {

            Node A = current.getNextNode();
            previous.setNextNode(A);

        }

    }

这有效,但它只删除第一次出现。我知道这可能是由于缺乏或适当的循环结构,但我已经在这方面工作了几个小时,我一路上感到困惑。我已尝试手动执行跟踪表,但这也无效。

如何编辑函数以便循环遍历整个链接列表并删除符合条件的节点?

2 个答案:

答案 0 :(得分:2)

这应该从链接列表中删除匹配的Node实例:

public void delete(int n) {

    int count = 0;

    Node prev = null, next;
    for (Node current = head; current != null; current = next) {
        next = current.getNextNode();
        if (current.getNum() == n) {
            count++;
            if (prev != null) {
                prev.setNextNode(next);
            } else {
                head = next;
            }
        } else {
            prev = current;
        }
    }

    System.out.print(count > 0 ? ("Number deleted: " + count) : "Not found");
}

答案 1 :(得分:0)

如果要删除链接列表中的节点,可以使用以下任何一种方式

  1. 仅与数量不等于N
  2. 的节点的新链接列表
  3. 或修改现有的。
  4. 我使用了第一种方法,使用元素创建一个新的链表,其中数字不等于N.

    @app.route('/')
    def hello():
        """Return a friendly HTTP greeting."""
        return 'Hello World!'
    
    def doesArticleExist(topic):
        foundTopics = wikipedia.search(topic)
        if (len(foundTopics) > 0):
            return foundTopics
        return ["No topics were found! Your topic is new!"]