如何从链表中删除特定元素?

时间:2017-05-18 12:01:19

标签: java

我得到了一些人的名字和平均值,但是我需要根据他的平均值删除其中一个(用户选择要删除哪一个),我该怎么做?

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String name = input.next();
    double avr = input.nextInt();
    Node first = new Node(name, avr);

    for (int i = 0; i < 4; i++) {
        System.out.println("enter name");
        name = input.next();
        System.out.println("enter avr");
        avr = input.nextInt();
        Node second = new Node(name, avr);
        second.next = first;
        first = second;
    }
    Node temp = first;
    double delete;
    System.out.println("avr of person you want to delete");
    delete = input.nextInt();
    while (temp != null) {
        if (delete == (temp.avr)) {

            //delete

            System.out.println("delete this guy");
            break;
        } else {
            temp = temp.next;
        }
    }

2 个答案:

答案 0 :(得分:0)

只需用两个指针(引用)遍历链表。一个人会搜索要删除的节点,另一个会在这个指针后面。

{{1}}

注意:对于平等的双精度比较不起作用。您只能比较小于或大于。阅读有关双(浮点)比较的精度问题。我建议你使用整数作为平均值,以防你必须比较相等。

答案 1 :(得分:0)

delete = input.nextInt();
if (temp.avr == delete){
    first = temp.next;
}
else{
    while (temp != null && temp.next != null) {
        if (delete == (temp.next.avr)) {
            temp.next = temp.next.next;
            System.out.println("delete this guy");
            break;
        } else {
            temp = temp.next;
        }
    }
}

说明:为了删除相关节点,您需要更新其上一个节点以指向下一个节点。

而且,由于我们总是检查是否temp.next == delete,我们必须首先检查需要删除的节点是否是第一个节点并相应地删除它。

注意:上面建议的代码应该专门用于您提供的示例。但是,一般情况下,我建议始终为所有可能的情况添加条件,例如first == null或找不到要删除的节点等等。