0

在不使用链表类中的 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;
        }
    }



}
4

3 回答 3

6
public Node 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
   }
   
   return head;
}
于 2013-10-17T05:39:17.647 回答
1

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

  1. 不遍历列表,因为 temp 永远不会更新(temp = temp.nextif块应该有帮助之后)。
  2. 您根本没有使用的值prev。似乎您的链表实现不会产生节点的父节点,这是您需要的,以便您next将父节点的更新为最小节点之后的节点。
  3. 在您实际遍历列表之后,您并没有删除该元素。
于 2013-10-17T04:57:25.787 回答
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;
}
于 2013-10-17T05:07:11.560 回答