首页 > 解决方案 > Java:从简单链表中删除节点

问题描述

我有两个列表 ItemsList , ilist 。如果 ilist 的节点包含与 ItemsList 的节点相同的值,我必须从 ItemsList 中删除它们,但是每次我使用以下代码中的删除函数时,我的列表都是空的:

 public void remove(ItemsList ilist) {
    if (empty()) {
        System.out.println("The list is empty.");
    } else {
        this.bubblesort();
        ilist.bubblesort();

        ItemNode a = this.first;
        ItemNode b = ilist.first;

        for(a=first;a!=null;a=a.next) {
            for(b=first;b!=null;b=b.next) {
                if(a.item==b.item) {
                    this.deleteNode(a.item);
                }
            }
        }   
    }
}

private void deleteNode(int data) {
    ItemNode prev = null;

    for(ItemNode trace = first; trace != null; trace = trace.next) {
        if(trace.item == data) {
            if (prev == null) {
                first = trace.next;
            } else {
                prev.next = trace.next;
            }
        } 
        else {
            prev = trace;
        }
    }
}

假设我有 ItemsList : [0,1,2,3,4] 和 ilist : [0,1] 这意味着 0 ,1 将从 ItemsList 中删除,但是当我显示 ItemsList 时,它说它是空的。对于特定问题,我不能使用数组、数组列表或其他 java 库。感谢您的时间 。

标签: javalist

解决方案


我会做什么:

public void remove(ItemsList iList) {
    if (iList.isEmpty()) {
        System.out.println("The list is empty.");
    } else {
        ItemNode prev = null;
        ItemNode a = this.first;
        while (a != null) {
            for (ItemNode b = iList.first; b != null; b = b.next) {
                if (a.item == b.item) prev.next = a.next;
            }
            a = a.next;
        }
    }
}

推荐阅读