2017-05-18 146 views
-1

我得到一些人的名字和平均值,但是我需要根据他的平均值删除其中的一个(用户选择哪一个删除),我该怎么做?如何从链接列表中删除特定元素?

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

您需要将前一个人的指针设置为要从链接列表中删除的人的指针。 – sawreals

+0

这是逻辑,另外存储以前的'Node'。如果当前'节点'确实有'avr',您想要“删除”将'next'从前一个'Node'设置为当前'Node'的'next'(如果有的话,如果不是'null '它)。 – SomeJavaGuy

+0

为什么不使用['LinkedList'](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html)? – Roland

回答

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或未找到要删除的节点等。

+0

有道理,谢谢! – GripGrandi

0

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

Node prev = null; 
Node curr = first; 

while((curr != null) && (curr.avr != delete)) { 
    prev = curr; 
    curr = curr.next; 
} 

if(curr == null) { 
    // not found 
} 
else if(prev == null) { 
    // first element 
    first = first.next; 
} 
else { 
    prev.next = curr.next; 
} 

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