在不使用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;
}
}
}
答案 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)
你没有真正发布问题所在,但看起来你的代码可能是:
temp = temp.next
块之后的if
应该有帮助。)prev
的值。您的链接列表实现似乎不会产生节点的父节点,这是您需要的,以便将父节点的next
更新为最小节点之后的节点。答案 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;
}