从链表中删除最小元素

时间:2013-10-17 04:51:46

标签: java linked-list

在不使用linkedlist类的remove()的情况下,从链表中删除最小元素的算法是什么?这是我必须找到最小的数据。我正在创建一个Linkedlist类,所以我不想使用已经存在的方法来执行此操作。

public void removeSmallest(){
    Node smallest=new Node(); 
    Node temp=head;
    Node prev=null;
    while(temp!=null){
        if(temp.next.data<temp.data && temp.next!=null){
            smallest.data=temp.next.data;
        }
    }



}

3 个答案:

答案 0 :(得分:4)

public void removeSmallest() {
   Node smallest = head; 
   Node temp = head;
   Node prev = null;

   while(temp != null) {
      if(temp.next != null && temp.next.data < smallest.data){
        smallest = temp.next;
        prev = temp;
      }
     temp = temp.next;
   }

   if(smallest != head) { //First element is not min
      prev.next = smallest.next;
   } else {
       head = head.next; //If first element is smallest, update the head
   }
}

答案 1 :(得分:1)

你没有真正发布问题所在,但看起来你的代码可能是:

  1. 不遍历列表,因为temp永远不会更新(temp = temp.next块之后的if应该有帮助。)
  2. 您根本没有使用prev的值。您的链接列表实现似乎不会产生节点的父节点,这是您需要的,以便将父节点的next更新为最小节点之后的节点。
  3. 实际遍历列表后,您不会删除该元素。

答案 2 :(得分:0)

我对Java语法有点生疏,但扩展了代码,我认为它看起来如下。

public void removeSmallest() {
    Node smallest = head; 
    Node temp = head;
    Node prev = null;

    while(temp != null) {
        if(temp.next != null && temp.next.data < smallest.data){
            smallest = temp.next;
            prev = temp;
        }
        temp = temp.next;
    }

    prev.next = smallest.next;
}