[英]Doubly-linked list insertion sort function: Why isn't my insertion sort function inserting the last two integer inputs into my linked list?
我的插入排序函數似乎沒有將我的最后兩個整數輸入:15和8插入到我的雙向鏈接列表中。 我的輸出遺漏了15和8。在插入排序函數中我怎么了? 我提供了函數的代碼,輸入和輸出。 謝謝。
這是我的插入排序功能:
public void insertionSort(int p)
{
Node n = new Node(p);
Node curr = head;
if(isEmpty())
{
head = n;
}
else
{
if(n.getProb() <= curr.getProb())
{
n.setNext(curr);
curr.setPrev(n);
head = n;
}
else if(n.getProb() > curr.getProb())
{
while(n.getProb() > curr.getProb() && curr.getNext() != null)
{
curr = curr.getNext();
}
if(n.getProb() < curr.getProb())
{
n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);
}
else if(n.getProb() >= curr.getProb())
{
n.setNext(curr.getNext());
n.setPrev(curr);
curr.setNext(n);
}
}
}
size++;
}
這是我的打印功能
public void printSortedList()
{
Node curr = head;
while(curr != null)
{
System.out.println(curr.getProb());
curr = curr.getNext();
}
}
這是我輸入主要功能的方式:
public static void main(String [] args)
{
List list = new List();
list.insertionSort(10);
list.insertionSort(5);
list.insertionSort(5);
list.insertionSort(60);
list.insertionSort(5);
list.insertionSort(10);
list.insertionSort(15);
list.insertionSort(8);
list.printSortedList();
}
這是我的輸出:
5
5
5
10
10
60
您在代碼中插入n.getProb() <= curr.getProb()
遇到錯誤
n.setNext(curr);
n.setPrev(curr.getPrev());
curr.setPrev(n);
您
代碼的n.getProb() > curr.getProb()
部分中存在相同的問題。
正確插入:
if (n.getProb() <= curr.getProb()) {
n.setNext(curr);
n.setPrev(curr.getPrev());
if (curr.getPrev() != null)
curr.getPrev().setNext(n);//set next to curr's prev
curr.setPrev(n);
} else if (n.getProb() > curr.getProb()) {
n.setNext(curr.getNext());
n.setPrev(curr);
if (curr.getNext() != null)
curr.getNext().setPrev(n);//set prev to curr's next
curr.setNext(n);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.