我寫了下面的例程,在Java中插入排序雙向鏈接列表交換數據從節點排序&它工作正常。但是,我試圖找出如何實際交換節點鏈接來實現插入排序。我嘗試了很多選項,但都失敗了,因爲自從它引用了節點引用的對象引用之後,將它們改變了起來&打破了列表。任何指針將不勝感激。插入排序 - 交換節點
Node類(內部類):
private class Node {
T data;
Node next;
Node prev;
}
排序例程
public void sort() {
if(isEmpty()) {
throw new RuntimeException("List is empty");
}
Node current = head;
while(current != null) {
for(Node prev=current; prev.prev != null; prev = prev.prev) {
if(prev.data.compareTo(prev.prev.data) <= 0) {
T tmp = prev.data;
prev.data = prev.prev.data;
prev.prev.data = tmp;
}
}
current = current.next;
}
}
EDIT1:
感謝lhuang用於向交換節點中的方法。有用。實際的答案在於Java按照值複製和傳遞引用,而不是對象(請參閱http://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html)。因此,您應該將節點交換傳遞給其他方法,而不是在同一地點嘗試&,因此它不會影響除要交換的兩個節點以外的其餘節點。
我修改了我的日常以下
public void sort() {
if(isEmpty()) {
throw new RuntimeException("List is empty");
}
Node current = top;
while(current != null) {
for(Node prev=current; prev != null && prev.prev != null; prev = prev.prev) {
if(prev.data.compareTo(prev.prev.data) <= 0) {
swap(prev,prev.prev);
}
}
current = current.next;
}
}
最後一個問題,在具有這種邏輯是,換&相同的兩個節點在這個邏輯處理兩次,當電流總是已經落後了。有沒有辦法來減輕這種情況,即在交換之後恢復其原始位置的電流?
http://stackoverflow.com/questions/2839431/java-swap-elements-in-linkedlist-class – zzk 2013-03-11 03:40:58